領扣LintCode演算法問題答案-322. 象棋游戲
目錄
- 322. 象棋游戲
- 鳴謝
322. 象棋游戲
在棋盤上
給定一個長度為N的二元組陣列queen,代表N個皇后棋子的坐標
給定一個長度為M的二元組陣列knight,代表M個騎士棋子的坐標
每個皇后可以襲擊同行,同列,或者同對角線的任意一個騎士棋子
請你回傳一個長度為M的答案陣列,依次代表每個騎士棋子是否會被攻擊到
樣例 1:
輸入:[[1,1],[2,2]]
[[3,3],[1,3],[4,5]]
輸出:[true.true,false]
解釋:第一個騎士可以被第一個和第二個皇后攻擊
第二個騎士可以被第一個皇后和第二個皇后攻擊
第三個騎士不會被皇后攻擊
public class Solution {
/**
* @param queen: queen‘coordinate
* @param knight: knight‘coordinate
* @return: if knight is attacked please return true,else return false
*/
public boolean[] isAttacked(int[][] queen, int[][] knight) {
// write your code here
boolean[] ret = new boolean[knight.length];
if (queen == null
|| queen.length == 0) {
return ret;
}
Set<Integer> rSet = new HashSet<>();
Set<Integer> cSet = new HashSet<>();
Set<Integer> dSet = new HashSet<>();
Set<Integer> sSet = new HashSet<>();
for (int[] q : queen) {
rSet.add(q[0]);
cSet.add(q[1]);
dSet.add(q[0] - q[1]);
sSet.add(q[0] + q[1]);
}
for (int i = 0; i < knight.length; i++) {
int[] k = knight[i];
if (rSet.contains(k[0])
|| cSet.contains(k[1])
|| dSet.contains(k[0] - k[1])
|| sSet.contains(k[0] + k[1])) {
ret[i] = true;
}
}
return ret;
}
}
原題鏈接點這里
鳴謝
非常感謝你愿意花時間閱讀本文章,本人水平有限,如果有什么說的不對的地方,請指正,
歡迎各位留言討論,希望小伙伴們都能每天進步一點點,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/46658.html
標籤:其他
