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;
}
}