LeetCode 1765. 地图中的最高点

1765. 地图中的最高点

Solution

思路:开始的思路是直接把水域固定,然后扩散,但是扩散的方式不对,我是默认一圈的最小值直接加1,但是会出现问题,正确做法多源BFS,就是全部默认为-1,然后从水域开始做BFS,如果遇到不是-1的格子,说明一定是从之前的水域出发了,所以不能重复更新,不然就不满足要求了。

class Solution {
    int[][] dir = {{0, 1}, {0, -1}, {-1, 0}, {1, 0}};
    Queue<int[]> queue = new ArrayDeque<int[]>();
    public int[][] highestPeak(int[][] isWater) {
        int m = isWater.length, n = isWater[0].length;
        int[][] ans = new int[m][n];
        for (int i = 0; i < m; i++) {
            Arrays.fill(ans[i], -1);
        }
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (isWater[i][j] == 1) {
                    ans[i][j] = 0;
                    queue.offer(new int[]{i, j});
                }
            }
        }
        while (!queue.isEmpty()) {
            int[] p = queue.poll();
            for (int i = 0; i < 4; i++) {
                int newX = p[0] + dir[i][0];
                int newY = p[1] + dir[i][1];
                if (newX >= 0 && newX < m && newY >= 0 && newY < n && ans[newX][newY] == -1) {
                    ans[newX][newY] = ans[p[0]][p[1]] + 1;
                    queue.offer(new int[]{newX, newY});
                }
            }
        }
        return ans;
    }
}
posted @ 2022-02-06 20:19  Frontierone  阅读(20)  评论(0编辑  收藏  举报