【每日一题Day326】LC1222可以攻击国王的皇后 | 哈希表+模拟

简介: 【每日一题Day326】LC1222可以攻击国王的皇后 | 哈希表+模拟

可以攻击国王的皇后【LC1222】

在一个 8x8 的棋盘上,放置着若干「黑皇后」和一个「白国王」。

给定一个由整数坐标组成的数组 queens ,表示黑皇后的位置;以及一对坐标 king ,表示白国王的位置,返回所有可以攻击国王的皇后的坐标(任意顺序)。

  • 思路
  • 将Queen的坐标一维化,记录在哈希表中
  • 从King出发,寻找8个方向中第一个Queen的位置
  • 实现
class Solution {
    public List<List<Integer>> queensAttacktheKing(int[][] queens, int[] king) {
        List<List<Integer>> res = new ArrayList<>();
        int[][] dirs = {{1, 0}, {-1, 0}, {0, -1}, {0, 1}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}};
        int N = 8;
        Set<Integer> set = new HashSet<>();
        for (int[] q : queens){
            set.add(q[0] * N + q[1]);
        }
        for (int i = 0; i < 8; i++){
            int x = king[0] + dirs[i][0], y = king[1] + dirs[i][1];
            while (x >= 0 && x < N && y >= 0 && y < N){
                if (set.contains(x * N + y)){
                    res.add(Arrays.asList(x, y));
                    break;
                }
                x += dirs[i][0];
                y += dirs[i][1];
            }
        }
        return res;
    }
}

image.png

目录
相关文章
|
2月前
|
存储 算法 程序员
【Leetcode 程序员面试金典 01.01】判定字符是否唯一 —— 位运算|哈希表
可以使用哈希表或位运算来解决此问题:由题可知s[i]仅包含小写字母,int[26]即能表示字符的出现次数;
|
2月前
|
算法
【每日一题Day297】LC2682找出转圈游戏输家 | 模拟+哈希表
【每日一题Day297】LC2682找出转圈游戏输家 | 模拟+哈希表
43 0
|
2月前
|
存储
【每日一题Day275】LC771宝石与石头 | 哈希表 状态压缩
【每日一题Day275】LC771宝石与石头 | 哈希表 状态压缩
28 0
|
2月前
|
机器人
【每日一题Day270】LC874模拟行走机器人 | 哈希表+模拟
【每日一题Day270】LC874模拟行走机器人 | 哈希表+模拟
31 0
|
2月前
|
算法
【每日一题Day229】LC2352相等行列对 | 哈希
【每日一题Day229】LC2352相等行列对 | 哈希
27 0
|
2月前
|
存储 人工智能 BI
【每日一题Day147】LC1615最大网络秩 | 枚举 哈希表
【每日一题Day147】LC1615最大网络秩 | 枚举 哈希表
35 0
|
2月前
【每日一题Day124】LC2347最好的扑克手牌 | 哈希表
【每日一题Day124】LC2347最好的扑克手牌 | 哈希表
24 0
|
2月前
【每日一题Day314】LC1921消灭怪物的最大数量 | 贪心+排序
【每日一题Day314】LC1921消灭怪物的最大数量 | 贪心+排序
30 0
|
2月前
|
API 索引
【每日一题Day346】LC1488避免洪水泛滥 | 贪心+哈希表
【每日一题Day346】LC1488避免洪水泛滥 | 贪心+哈希表
30 0
|
2月前
【每日一题Day172】LC2399检查相同字母间的距离 | 哈希表
【每日一题Day172】LC2399检查相同字母间的距离 | 哈希表
27 0