File tree Expand file tree Collapse file tree 1 file changed +67
-0
lines changed Expand file tree Collapse file tree 1 file changed +67
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public int findCircleNum (int [][] isConnected ) {
3
+ if (isConnected == null || isConnected .length == 0 ) {
4
+ return 0 ;
5
+ }
6
+
7
+ UnionFind uf = new UnionFind (isConnected .length );
8
+
9
+ for (int i = 0 ; i < isConnected .length ; i ++) {
10
+ for (int j = 0 ; j < isConnected [i ].length ; j ++) {
11
+ if (isConnected [i ][j ] == 1 ) {
12
+ uf .union (i , j );
13
+ }
14
+ }
15
+ }
16
+
17
+ return uf .count ();
18
+ }
19
+
20
+ private class UnionFind {
21
+ private int [] parents , size ;
22
+ private int count ;
23
+
24
+ public UnionFind (int n ) {
25
+ parents = new int [n ];
26
+ size = new int [n ];
27
+ count = n ;
28
+
29
+ for (int i = 0 ; i < parents .length ; i ++) {
30
+ parents [i ] = i ;
31
+ size [i ] = 1 ;
32
+ }
33
+ }
34
+
35
+ public int find (int node ) {
36
+ if (parents [node ] == node ) {
37
+ return node ;
38
+ }
39
+
40
+ parents [node ] = find (parents [parents [node ]]);
41
+ return parents [node ];
42
+ }
43
+
44
+ public void union (int x , int y ) {
45
+ int xParent = find (x );
46
+ int yParent = find (y );
47
+
48
+ if (xParent == yParent ) {
49
+ return ;
50
+ }
51
+
52
+ if (size [xParent ] > size [yParent ]) {
53
+ parents [yParent ] = xParent ;
54
+ size [xParent ] += size [yParent ];
55
+ } else {
56
+ parents [xParent ] = yParent ;
57
+ size [yParent ] += size [xParent ];
58
+ }
59
+
60
+ --count ;
61
+ }
62
+
63
+ public int count () {
64
+ return count ;
65
+ }
66
+ }
67
+ }
You can’t perform that action at this time.
0 commit comments