323. Number of Connected Components in an Undirected Graph

Problem:
Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), write a function to find the number of connected components in an undirected graph.
Example 1:
     0          3
     |          |
     1 --- 2    4
Given n = 5 and edges = [[0, 1], [1, 2], [3, 4]], return 2.
Example 2:
     0           4
     |           |
     1 --- 2 --- 3
Given n = 5 and edges = [[0, 1], [1, 2], [2, 3], [3, 4]], return 1.
Note:
You can assume that no duplicate edges will appear in edges. Since all edges are undirected, [0, 1] is the same as [1, 0] and thus will not appear together in edges.

Analysis:
Standard union find problem. 如果有环的话component不会减少。
Solution:
Be careful with the corner case. 
class Solution {
    class Union_Find {
        private int[] father;
        public int count = 0;
        public Union_Find(int n) {
            father = new int[n];
            
            for (int i = 0; i < n; i++) {
                father[i] = i;
            }
            count = n;
                
        }

        public void connect(int a, int b) {
            int root_a = find(a);
            int root_b = find(b);
            if (root_a != root_b) {
                father[root_a] = root_b;
                count--;
            }
        }

        public int find(int n) {
            if (father[n] == n) 
                return n;
            return father[n] = find(father[n]);
        } 

        public boolean query(int a, int b) {
            int root_a =  find(a);
            int root_b = find(b);
            return root_a == root_b;
        }
    } 

    public int countComponents(int n, int[][] edges) {
        if (n < 2)
            return n;
        
        int m = edges.length;
        Union_Find uf = new Union_Find(n);
        for (int i = 0; i < m; i++) {
            uf.connect(edges[i][0], edges[i][1]);
        }

        return uf.count;
    }
}

评论

此博客中的热门博文

663. Equal Tree Partition

776. Split BST

426. Convert Binary Search Tree to Sored Doubly Linked List