栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

leetcode1001. 网格照明(hard)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode1001. 网格照明(hard)

网格照明

解题思路

代码
力扣链接

解题思路

官方题解
大佬题解

哈希表 代码

class Solution {
    static final int[][] DIRS = new int[][]{{0, 0}, {0,1},{0,-1},{1,0},{-1,0},{-1,-1},{1,1},{1,-1},{-1,1}};

    public int[] gridIllumination(int n, int[][] lamps, int[][] queries) {
        //使用集合存储开启的灯的二维坐标转成一维的值
        Set set = new HashSet<>();
        //存储每个灯能够照亮的行,列,正对角线,反对角线,及其被照亮的次数
        Map row = new HashMap<>();
        Map col = new HashMap<>();
        Map z = new HashMap<>();
        Map f = new HashMap<>();

        for (int[] lamp : lamps) {
            int x = lamp[0];
            int y = lamp[1];
            if (!set.contains(n * x + y)) {
                increment(row, x);
                increment(col, y);
                increment(z, x -y);
                increment(f, x + y);
                set.add(n * x + y);
            }
        }

        int size = queries.length;
        int[] res = new int[size];
        for (int i = 0; i < size; i++) {
            int x = queries[i][0];
            int y = queries[i][1];
            if (row.containsKey(x) || col.containsKey(y) || z.containsKey(x - y) || f.containsKey(x + y)) {
                res[i] = 1;
            }
            //关灯
            for (int[] dir : DIRS) {
                int nx = x + dir[0];
                int ny = y + dir[1];
                if (nx >= 0 && nx < n && ny >= 0 && ny < n) {
                    if (set.contains(n * nx + ny)) {
                        set.remove(n * nx + ny);
                        decrement(row, nx);
                        decrement(col, ny);
                        decrement(z, nx - ny);
                        decrement(f, nx + ny);
                    }
                }
            }
            
        }
        return res;
    }

    void increment(Map map, int key) {
        map.put(key, map.getOrDefault(key, 0) + 1);
    }
    void decrement(Map map, int key) {
        if (map.get(key) != null) {
            if (map.get(key) == 1) {
                map.remove(key);
            } else {
                map.put(key, map.get(key) - 1);
            }
        }
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/733208.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号