Skip to content

Commit 8b89b8c

Browse files
committed
feat: add solution to lc problem: No.0323
No.0323.Number of Connected Components in an Undirected Graph
1 parent 8bc0204 commit 8b89b8c

File tree

7 files changed

+176
-82
lines changed

7 files changed

+176
-82
lines changed

solution/0300-0399/0323.Number of Connected Components in an Undirected Graph/README.md

Lines changed: 60 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -107,13 +107,12 @@ d[find(a)] = distance
107107
```python
108108
class Solution:
109109
def countComponents(self, n: int, edges: List[List[int]]) -> int:
110-
p = list(range(n))
111-
112110
def find(x):
113111
if p[x] != x:
114112
p[x] = find(p[x])
115113
return p[x]
116-
114+
115+
p = list(range(n))
117116
for a, b in edges:
118117
p[find(a)] = find(b)
119118
return sum(i == find(i) for i in range(n))
@@ -133,16 +132,16 @@ class Solution {
133132
p[i] = i;
134133
}
135134
for (int[] e : edges) {
136-
p[find(e[0])] = find(e[1]);
135+
int a = e[0], b = e[1];
136+
p[find(a)] = find(b);
137137
}
138-
139-
int cnt = 0;
138+
int ans = 0;
140139
for (int i = 0; i < n; ++i) {
141140
if (i == find(i)) {
142-
++cnt;
141+
++ans;
143142
}
144143
}
145-
return cnt;
144+
return ans;
146145
}
147146

148147
private int find(int x) {
@@ -164,13 +163,16 @@ public:
164163
int countComponents(int n, vector<vector<int>>& edges) {
165164
p.resize(n);
166165
for (int i = 0; i < n; ++i) p[i] = i;
167-
for (auto e : edges) p[find(e[0])] = find(e[1]);
168-
int cnt = 0;
169-
for (int i = 0; i < n; ++i)
166+
for (auto& e : edges)
170167
{
171-
if (i == find(i)) ++cnt;
168+
int a = e[0], b = e[1];
169+
p[find(a)] = find(b);
172170
}
173-
return cnt;
171+
int ans = 0;
172+
for (int i = 0; i < n; ++i)
173+
if (i == find(i))
174+
++ans;
175+
return ans;
174176
}
175177

176178
int find(int x) {
@@ -183,31 +185,62 @@ public:
183185
### **Go**
184186
185187
```go
186-
var p []int
187-
188188
func countComponents(n int, edges [][]int) int {
189-
p = make([]int, n)
190-
for i := 1; i < n; i++ {
189+
p := make([]int, n)
190+
for i := range p {
191191
p[i] = i
192192
}
193+
var find func(x int) int
194+
find = func(x int) int {
195+
if p[x] != x {
196+
p[x] = find(p[x])
197+
}
198+
return p[x]
199+
}
193200
for _, e := range edges {
194-
p[find(e[0])] = find(e[1])
201+
a, b := e[0], e[1]
202+
p[find(a)] = find(b)
195203
}
196-
cnt := 0
204+
ans := 0
197205
for i := 0; i < n; i++ {
198206
if i == find(i) {
199-
cnt++
207+
ans++
200208
}
201209
}
202-
return cnt
210+
return ans
203211
}
212+
```
204213

205-
func find(x int) int {
206-
if p[x] != x {
207-
p[x] = find(p[x])
208-
}
209-
return p[x]
210-
}
214+
### **JavaScript**
215+
216+
```js
217+
/**
218+
* @param {number} n
219+
* @param {number[][]} edges
220+
* @return {number}
221+
*/
222+
var countComponents = function (n, edges) {
223+
let p = new Array(n);
224+
for (let i = 0; i < n; ++i) {
225+
p[i] = i;
226+
}
227+
function find(x) {
228+
if (p[x] != x) {
229+
p[x] = find(p[x]);
230+
}
231+
return p[x];
232+
}
233+
for (const [a, b] of edges) {
234+
p[find(a)] = find(b);
235+
}
236+
let ans = 0;
237+
for (let i = 0; i < n; ++i) {
238+
if (i == find(i)) {
239+
++ans;
240+
}
241+
}
242+
return ans;
243+
};
211244
```
212245

213246
### **...**

solution/0300-0399/0323.Number of Connected Components in an Undirected Graph/README_EN.md

Lines changed: 60 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,12 @@
4444
```python
4545
class Solution:
4646
def countComponents(self, n: int, edges: List[List[int]]) -> int:
47-
p = list(range(n))
48-
4947
def find(x):
5048
if p[x] != x:
5149
p[x] = find(p[x])
5250
return p[x]
53-
51+
52+
p = list(range(n))
5453
for a, b in edges:
5554
p[find(a)] = find(b)
5655
return sum(i == find(i) for i in range(n))
@@ -68,16 +67,16 @@ class Solution {
6867
p[i] = i;
6968
}
7069
for (int[] e : edges) {
71-
p[find(e[0])] = find(e[1]);
70+
int a = e[0], b = e[1];
71+
p[find(a)] = find(b);
7272
}
73-
74-
int cnt = 0;
73+
int ans = 0;
7574
for (int i = 0; i < n; ++i) {
7675
if (i == find(i)) {
77-
++cnt;
76+
++ans;
7877
}
7978
}
80-
return cnt;
79+
return ans;
8180
}
8281

8382
private int find(int x) {
@@ -99,13 +98,16 @@ public:
9998
int countComponents(int n, vector<vector<int>>& edges) {
10099
p.resize(n);
101100
for (int i = 0; i < n; ++i) p[i] = i;
102-
for (auto e : edges) p[find(e[0])] = find(e[1]);
103-
int cnt = 0;
104-
for (int i = 0; i < n; ++i)
101+
for (auto& e : edges)
105102
{
106-
if (i == find(i)) ++cnt;
103+
int a = e[0], b = e[1];
104+
p[find(a)] = find(b);
107105
}
108-
return cnt;
106+
int ans = 0;
107+
for (int i = 0; i < n; ++i)
108+
if (i == find(i))
109+
++ans;
110+
return ans;
109111
}
110112

111113
int find(int x) {
@@ -118,31 +120,62 @@ public:
118120
### **Go**
119121
120122
```go
121-
var p []int
122-
123123
func countComponents(n int, edges [][]int) int {
124-
p = make([]int, n)
125-
for i := 1; i < n; i++ {
124+
p := make([]int, n)
125+
for i := range p {
126126
p[i] = i
127127
}
128+
var find func(x int) int
129+
find = func(x int) int {
130+
if p[x] != x {
131+
p[x] = find(p[x])
132+
}
133+
return p[x]
134+
}
128135
for _, e := range edges {
129-
p[find(e[0])] = find(e[1])
136+
a, b := e[0], e[1]
137+
p[find(a)] = find(b)
130138
}
131-
cnt := 0
139+
ans := 0
132140
for i := 0; i < n; i++ {
133141
if i == find(i) {
134-
cnt++
142+
ans++
135143
}
136144
}
137-
return cnt
145+
return ans
138146
}
147+
```
139148

140-
func find(x int) int {
141-
if p[x] != x {
142-
p[x] = find(p[x])
143-
}
144-
return p[x]
145-
}
149+
### **JavaScript**
150+
151+
```js
152+
/**
153+
* @param {number} n
154+
* @param {number[][]} edges
155+
* @return {number}
156+
*/
157+
var countComponents = function (n, edges) {
158+
let p = new Array(n);
159+
for (let i = 0; i < n; ++i) {
160+
p[i] = i;
161+
}
162+
function find(x) {
163+
if (p[x] != x) {
164+
p[x] = find(p[x]);
165+
}
166+
return p[x];
167+
}
168+
for (const [a, b] of edges) {
169+
p[find(a)] = find(b);
170+
}
171+
let ans = 0;
172+
for (let i = 0; i < n; ++i) {
173+
if (i == find(i)) {
174+
++ans;
175+
}
176+
}
177+
return ans;
178+
};
146179
```
147180

148181
### **...**

solution/0300-0399/0323.Number of Connected Components in an Undirected Graph/Solution.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@ class Solution {
55
int countComponents(int n, vector<vector<int>>& edges) {
66
p.resize(n);
77
for (int i = 0; i < n; ++i) p[i] = i;
8-
for (auto e : edges) p[find(e[0])] = find(e[1]);
9-
int cnt = 0;
10-
for (int i = 0; i < n; ++i)
8+
for (auto& e : edges)
119
{
12-
if (i == find(i)) ++cnt;
10+
int a = e[0], b = e[1];
11+
p[find(a)] = find(b);
1312
}
14-
return cnt;
13+
int ans = 0;
14+
for (int i = 0; i < n; ++i)
15+
if (i == find(i))
16+
++ans;
17+
return ans;
1518
}
1619

1720
int find(int x) {
Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
1-
var p []int
2-
31
func countComponents(n int, edges [][]int) int {
4-
p = make([]int, n)
5-
for i := 1; i < n; i++ {
2+
p := make([]int, n)
3+
for i := range p {
64
p[i] = i
75
}
6+
var find func(x int) int
7+
find = func(x int) int {
8+
if p[x] != x {
9+
p[x] = find(p[x])
10+
}
11+
return p[x]
12+
}
813
for _, e := range edges {
9-
p[find(e[0])] = find(e[1])
14+
a, b := e[0], e[1]
15+
p[find(a)] = find(b)
1016
}
11-
cnt := 0
17+
ans := 0
1218
for i := 0; i < n; i++ {
1319
if i == find(i) {
14-
cnt++
20+
ans++
1521
}
1622
}
17-
return cnt
18-
}
19-
20-
func find(x int) int {
21-
if p[x] != x {
22-
p[x] = find(p[x])
23-
}
24-
return p[x]
23+
return ans
2524
}

solution/0300-0399/0323.Number of Connected Components in an Undirected Graph/Solution.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
class Solution {
22
private int[] p;
3-
3+
44
public int countComponents(int n, int[][] edges) {
55
p = new int[n];
66
for (int i = 0; i < n; ++i) {
77
p[i] = i;
88
}
99
for (int[] e : edges) {
10-
p[find(e[0])] = find(e[1]);
10+
int a = e[0], b = e[1];
11+
p[find(a)] = find(b);
1112
}
12-
13-
int cnt = 0;
13+
int ans = 0;
1414
for (int i = 0; i < n; ++i) {
1515
if (i == find(i)) {
16-
++cnt;
16+
++ans;
1717
}
1818
}
19-
return cnt;
19+
return ans;
2020
}
2121

2222
private int find(int x) {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* @param {number} n
3+
* @param {number[][]} edges
4+
* @return {number}
5+
*/
6+
var countComponents = function (n, edges) {
7+
let p = new Array(n);
8+
for (let i = 0; i < n; ++i) {
9+
p[i] = i;
10+
}
11+
function find(x) {
12+
if (p[x] != x) {
13+
p[x] = find(p[x]);
14+
}
15+
return p[x];
16+
}
17+
for (const [a, b] of edges) {
18+
p[find(a)] = find(b);
19+
}
20+
let ans = 0;
21+
for (let i = 0; i < n; ++i) {
22+
if (i == find(i)) {
23+
++ans;
24+
}
25+
}
26+
return ans;
27+
};

0 commit comments

Comments
 (0)