回味一下大一时候写的并查集,拿java写写看
class Solution {
int[] f;
public int findCircleNum(int[][] isConnected) {
int n = isConnected.length;
f = new int[n];
for (int i = 0; i < n; i++) {
f[i] = i;
}
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if(isConnected[i][j] == 1) {
mix(i, j);
}
}
}
int ans = 0;
for (int i = 0; i < n; i++) {
if(find(i) == i) {
ans ++;
}
}
return ans;
}
void mix(int x, int y) {
int fx = find(x);
int fy = find(y);
if(fx != fy) {
f[fx] = fy;
}
}
int find(int x) {
while(x != f[x]) {
x = f[x];
}
return x;
}
}
简单优化
while(temp != x) {
int next = f[temp];
f[temp] = x;
temp = next;
}
速度从3s变成1s



