回味一下大一时候写的并查集,拿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


本文回顾并分享了作者在大学时期重写并查集的Java实现,通过简化find()方法,将执行时间从3秒优化到1秒。详细介绍了混合集合(mix)和查找根节点(find)的改进策略。
386

被折叠的 条评论
为什么被折叠?



