Untitled
unknown
java
5 months ago
1.6 kB
4
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