JAVA實現並查集類
阿新 • • 發佈:2021-01-13
public class Unifind{ private int[] fa; private int[] rank; public Unifind(int n) { this.fa=new int[n]; this.rank = new int[n]; for(int i=0;i<n;i++) { this.fa[i]=i; this.rank[i]=1; } } public void union(int x,int y) { int rootx=find(x); int rooty=find(y); if(rootx==rooty) return; if(rank[rootx]==rank[rooty]) { fa[rootx]=rooty; rank[rooty]+=1; } else if(rank[rootx]<rank[rooty]) { fa[rootx]=rooty; rank[rooty]+=1; } else { fa[rooty]=rootx; rank[rootx]+=1; } } public int find(int x) { return fa[x]==x?x:find(fa[x]); } }
相較於普通的並查集增添了rank使並查集的樹趨於平衡,有效優化了計算效率. 參考題目leetcode1202