1. 程式人生 > 其它 >JAVA實現並查集類

JAVA實現並查集類

技術標籤:javajavaleetcode演算法

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