Untitled
unknown
java
a year ago
1.6 kB
6
Indexable
class Solution {
int[][] dirs = new int[][] {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
public List<Integer> numIslands2(int m, int n, int[][] positions) {
int id = 1;
int count = 0;
int[][] grid = new int[m][n];
List<Integer> list = new ArrayList<>();
for (int[] p : positions) {
if (grid[p[0]][p[1]] != 0) {
list.add(count);
continue;
}
int minNeighbor = Integer.MAX_VALUE;
Set<Integer> neighbors = new HashSet<>();
for (int[] dir : dirs) {
int x = p[0] + dir[0];
int y = p[1] + dir[1];
if (x < 0 || y < 0 || x >= m || y >= n || grid[x][y] == 0) {
continue;
}
neighbors.add(grid[x][y]);
minNeighbor = Math.min(minNeighbor, grid[x][y]);
}
if (neighbors.isEmpty()) {
grid[p[0]][p[1]] = id;
id++;
count++;
} else {
grid[p[0]][p[1]] = -1;
dfs(grid, p[0], p[1], minNeighbor);
count -= neighbors.size() - 1;
}
list.add(count);
}
return list;
}
private void dfs(int[][] grid, int i, int j, int id) {
if (i < 0 || j < 0 || i >= grid.length || j >= grid[0].length || grid[i][j] == 0 || grid[i][j] == id) {
return;
}
grid[i][j] = id;
for (int[] dir : dirs) {
int x = i + dir[0];
int y = j + dir[1];
dfs(grid, x, y, id);
}
}
}Editor is loading...
Leave a Comment