题目
Input: m = 3, n = 3, positions = [[0,0], [0,1], [1,2], [2,1]]
Output: [1,1,2,3]
题目描述:m*n的网格区域,刚开始都是水,addLand操作会把某个区域变成陆地;动态求出所有addLand操作后的陆地连通区域数量;
分析
DFS/BFS不适合处理动态连通问题; 如下UF解法-时间均摊复杂度非常接近O(k) ,时间复杂度O(k * log mn)k代表posotions的长度,空间复杂度为O(m * n)
解法
class Solution {
class UnionFind {
private int union[];
private int rank[];
private int size = 0;
public UnionFind(int n) {
union = new int[n];
rank = new int[n];
for (int i = 0; i < n; i++) {
union[i] = -1;
}
}
private int find(int i) {
while (i != union[i]) i = union[i];
return i;
}
public void union(int x, int y) {
if (un