首页>itarticle>[lintcode] problem 434 – number of islands ii
[lintcode] problem 434 – number of islands ii
admin11月 13, 20200
Given a n,m which means the row and column of the 2D matrix and an array of pair A(size k). Originally, the 2D matrix is all 0 which means there is only sea in the matrix. The list pair has k operator and each operator has two integer A[i].x, A[i].y means that you can change the grid matrix[A[i].x][A[i].y] from sea to island. Return how many island are there in the matrix after each operator.
Note
0 is represented as the sea, 1 is represented as the island. If two 1 is adjacent, we consider them in the same island. We only consider up/down/left/right adjacent.
Example
No.1
Input: n = 4, m = 5, A = [[1,1],[0,1],[3,3],[3,4]]
publicintfind(int p){ while (p != id[p]) p = id[p];
return p; } }
public List<Integer> numIslands2(int n, int m, Point[] operators){ List<Integer> result = new ArrayList<>(); if (operators == null || operators.length == 0) return result; int[][] dirs = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; Set<Integer> island = new HashSet<>(); UnionFind uf = new UnionFind(n * m);
for (Point operator : operators) { int idx = operator.x * m + operator.y; island.add(idx);
for (int[] dir : dirs) { int x = operator.x + dir[0]; int y = operator.y + dir[1]; int newIdx = x * m + y;
if (x < 0 || y < 0 || x >= n || y >= m || !island.contains(newIdx)) continue; uf.union(idx, newIdx); }
近期评论