【每日一题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

目录
相关文章
|
6月前
|
存储
【每日一题Day275】LC771宝石与石头 | 哈希表 状态压缩
【每日一题Day275】LC771宝石与石头 | 哈希表 状态压缩
44 0
|
6月前
|
算法
【每日一题Day297】LC2682找出转圈游戏输家 | 模拟+哈希表
【每日一题Day297】LC2682找出转圈游戏输家 | 模拟+哈希表
67 0
|
6月前
【每日一题Day118】LC1124表现良好的最长时间段 | 前缀和+单调栈/哈希表
【每日一题Day118】LC1124表现良好的最长时间段 | 前缀和+单调栈/哈希表
54 0
|
6月前
|
机器人
【每日一题Day270】LC874模拟行走机器人 | 哈希表+模拟
【每日一题Day270】LC874模拟行走机器人 | 哈希表+模拟
47 0
|
6月前
|
存储 算法
【每日一题Day341】LC2034股票价格波动 | 堆+哈希表
【每日一题Day341】LC2034股票价格波动 | 堆+哈希表
31 0
|
6月前
【每日一题Day313】LC2511最多可以摧毁的敌人城堡数目 | 模拟
【每日一题Day313】LC2511最多可以摧毁的敌人城堡数目 | 模拟
41 0
|
6月前
【每日一题Day312】LC2240买钢笔和铅笔的方案数 | 完全背包 数学
【每日一题Day312】LC2240买钢笔和铅笔的方案数 | 完全背包 数学
60 0
|
5月前
|
存储 算法 测试技术
力扣经典150题第四十九题:插入区间
力扣经典150题第四十九题:插入区间
24 0
|
6月前
|
vr&ar
【每日一题Day166】LC1053交换一次的先前排列 | 贪心
【每日一题Day166】LC1053交换一次的先前排列 | 贪心
72 1
|
6月前
【每日一题Day124】LC2347最好的扑克手牌 | 哈希表
【每日一题Day124】LC2347最好的扑克手牌 | 哈希表
37 0