【剑指 Offer II 118. 多余的边】并查集求回路

class Solution {
    int[] parent;
    int[] rank;

    public void init(int n) {
        parent = new int[n + 1];
        rank = new int[n + 1];

        for (int i = 1; i <= n; i++) {
            parent[i] = i;
            rank[i] = 1;
        }
    }

    public int find(int x){
        if( parent[x] == x){
            return x;
        }else{
            return find(parent[x]);
        }
    }

    public void union(int a,int b){
        if( rank[a] >= rank[b]){
            parent[b] = a;
            rank[a] += rank[b];
            return ;
        }
        parent[a] = b;
        rank[b] += rank[a];
        return;
    }

    public int[] findRedundantConnection(int[][] edges) {
        int n = edges.length;
        init(n);
        for (int[] edge : edges) {
            int a = edge[0];
            int b = edge[1];

            int u1 = find(a);
            int u2 = find(b);

            if( u1 == u2){
                return edge;
            }

            union(u1,u2);

        }

        return null;
    }


}

 

posted @ 2022-06-03 18:33  fishcanfly  阅读(31)  评论(0)    收藏  举报
//雪花飘落效果