547. 省份数量

并查集的父节点数组正确建立的关键是:
用union(join)建立边关系。
并查集一般用来数连通图个数。

class Solution {
    public int findCircleNum(int[][] isConnected) {

        int[] parent=new int[isConnected.length];
        for(int i=0;i<parent.length;i++)
            parent[i]=i;
        for(int i=0;i<isConnected.length;i++){
            for(int j=0;j<i;j++){
                if(isConnected[i][j]==0)continue;
               // parent[j]=i;不行哦,而且parent[i]=j也不行
                join(parent,i,j);
                //System.out.println(j+"的父亲是"+i);  
            }
        }
        
        HashSet<Integer> set=new HashSet<>();
     for(int i=0;i<parent.length;i++)
            find(parent,i);
         for(int i=0;i<parent.length;i++)
           set.add(parent[i]);
        return set.size();    
    }
    int find(int[] parent,int x) { //x是什么?是节点
        int r=x;
        while(r!=parent[r])
             r=parent[r];
        
        int j;
        while(r!=x){
            j=parent[x];
            parent[x]=r;
            x=j;
        }
        return r;
    }
    void join(int[] parent,int x,int y){
        int a=find(parent,x);
        int b=find(parent,y);
        if(a!=b)
             parent[b]=a;

    }
  
        
        


    

}

547. 省份数量

上一篇:【CCF-CSP】网络延时


下一篇:为什么前端计算不准确-number类型