思路
1)一组节点关系,求圈子数量不要求顺序——多叉树---归并
2)用quick-find解决
class Solution {
public int findCircleNum(int[][] isConnected) {
UnionFind unionFind = new UnionFind(isConnected.length);
for (int i = 0; i < isConnected.length; i++) {
for (int j = 0; j < isConnected.length; j++) {
if (isConnected[i][j] == 1){
unionFind.union(i, j);
}
}
}
return unionFind.getCount();
}
class UnionFind{
int count;//联通数
int[] ids;//每个元素的标识
int N;//节点个数
public UnionFind(int n){
ids = new int[n];
N = n;
count = N;
//每个节点是一个标识为i的圈子
for (int i = 0; i < ids.length; i++) {
ids[i] = i;
}
}
public int getCount(){
return this.count;
}
public boolean union(int x, int y){
int idx = ids[x];
int idy = ids[y];
if(idx == idy){
return true;
}
for (int i = 0; i < N; i++) {
if (ids[i] == idx){
//x的圈子都染成标识为y
ids[i] = idy;
}
}
count--;
return true;
}
}
}