Skip to content

Commit c0afbbf

Browse files
committed
feat: add solutions to lc problem: No.1101
No.1101.The Earliest Moment When Everyone Become Friends
1 parent 9803359 commit c0afbbf

File tree

6 files changed

+88
-122
lines changed

6 files changed

+88
-122
lines changed

solution/1100-1199/1101.The Earliest Moment When Everyone Become Friends/README.md

Lines changed: 29 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -119,19 +119,17 @@ d[find(a)] = distance
119119
```python
120120
class Solution:
121121
def earliestAcq(self, logs: List[List[int]], n: int) -> int:
122-
p = list(range(n))
123-
logs.sort(key=lambda x: x[0])
124-
125122
def find(x):
126123
if p[x] != x:
127124
p[x] = find(p[x])
128125
return p[x]
129-
126+
127+
p = list(range(n))
128+
logs.sort()
130129
for t, a, b in logs:
131-
pa, pb = find(a), find(b)
132-
if pa == pb:
130+
if find(a) == find(b):
133131
continue
134-
p[pa] = pb
132+
p[find(a)] = find(b)
135133
n -= 1
136134
if n == 1:
137135
return t
@@ -153,13 +151,11 @@ class Solution {
153151
}
154152
Arrays.sort(logs, Comparator.comparingInt(a -> a[0]));
155153
for (int[] log : logs) {
156-
int t = log[0];
157-
int a = log[1], b = log[2];
158-
int pa = find(a), pb = find(b);
159-
if (pa == pb) {
154+
int t = log[0], a = log[1], b = log[2];
155+
if (find(a) == find(b)) {
160156
continue;
161157
}
162-
p[pa] = pb;
158+
p[find(a)] = find(b);
163159
--n;
164160
if (n == 1) {
165161
return t;
@@ -185,26 +181,21 @@ public:
185181
vector<int> p;
186182

187183
int earliestAcq(vector<vector<int>>& logs, int n) {
188-
for (int i = 0; i < n; ++i)
189-
p.push_back(i);
184+
p.resize(n);
185+
for (int i = 0; i < n; ++i) p[i] = i;
190186
sort(logs.begin(), logs.end());
191-
for (auto log : logs)
187+
for (auto& log : logs)
192188
{
193-
int a = log[1], b = log[2];
194-
int pa = find(a), pb = find(b);
195-
if (pa == pb)
196-
continue;
197-
p[pa] = pb;
198-
--n;
199-
if (n == 1)
200-
return log[0];
189+
int t = log[0], a = log[1], b = log[2];
190+
if (find(a) == find(b)) continue;
191+
p[find(a)] = find(b);
192+
if (--n == 1) return t;
201193
}
202194
return -1;
203195
}
204196

205197
int find(int x) {
206-
if (p[x] != x)
207-
p[x] = find(p[x]);
198+
if (p[x] != x) p[x] = find(p[x]);
208199
return p[x];
209200
}
210201
};
@@ -213,37 +204,34 @@ public:
213204
### **Go**
214205
215206
```go
216-
var p []int
217-
218207
func earliestAcq(logs [][]int, n int) int {
219-
p = make([]int, n)
220-
for i := 0; i < n; i++ {
208+
p := make([]int, n)
209+
for i := range p {
221210
p[i] = i
222211
}
212+
var find func(x int) int
213+
find = func(x int) int {
214+
if p[x] != x {
215+
p[x] = find(p[x])
216+
}
217+
return p[x]
218+
}
223219
sort.Slice(logs, func(i, j int) bool {
224220
return logs[i][0] < logs[j][0]
225221
})
226222
for _, log := range logs {
227-
a, b := log[1], log[2]
228-
pa, pb := find(a), find(b)
229-
if pa == pb {
223+
t, a, b := log[0], log[1], log[2]
224+
if find(a) == find(b) {
230225
continue
231226
}
232-
p[pa] = pb
227+
p[find(a)] = find(b)
233228
n--
234229
if n == 1 {
235-
return log[0]
230+
return t
236231
}
237232
}
238233
return -1
239234
}
240-
241-
func find(x int) int {
242-
if p[x] != x {
243-
p[x] = find(p[x])
244-
}
245-
return p[x]
246-
}
247235
```
248236

249237
### **...**

solution/1100-1199/1101.The Earliest Moment When Everyone Become Friends/README_EN.md

Lines changed: 31 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -46,26 +46,26 @@ The sixth event occurs at timestamp = 20190301 and after 0 and 3 become friends
4646

4747
## Solutions
4848

49+
Union find.
50+
4951
<!-- tabs:start -->
5052

5153
### **Python3**
5254

5355
```python
5456
class Solution:
5557
def earliestAcq(self, logs: List[List[int]], n: int) -> int:
56-
p = list(range(n))
57-
logs.sort(key=lambda x: x[0])
58-
5958
def find(x):
6059
if p[x] != x:
6160
p[x] = find(p[x])
6261
return p[x]
63-
62+
63+
p = list(range(n))
64+
logs.sort()
6465
for t, a, b in logs:
65-
pa, pb = find(a), find(b)
66-
if pa == pb:
66+
if find(a) == find(b):
6767
continue
68-
p[pa] = pb
68+
p[find(a)] = find(b)
6969
n -= 1
7070
if n == 1:
7171
return t
@@ -85,13 +85,11 @@ class Solution {
8585
}
8686
Arrays.sort(logs, Comparator.comparingInt(a -> a[0]));
8787
for (int[] log : logs) {
88-
int t = log[0];
89-
int a = log[1], b = log[2];
90-
int pa = find(a), pb = find(b);
91-
if (pa == pb) {
88+
int t = log[0], a = log[1], b = log[2];
89+
if (find(a) == find(b)) {
9290
continue;
9391
}
94-
p[pa] = pb;
92+
p[find(a)] = find(b);
9593
--n;
9694
if (n == 1) {
9795
return t;
@@ -117,26 +115,21 @@ public:
117115
vector<int> p;
118116

119117
int earliestAcq(vector<vector<int>>& logs, int n) {
120-
for (int i = 0; i < n; ++i)
121-
p.push_back(i);
118+
p.resize(n);
119+
for (int i = 0; i < n; ++i) p[i] = i;
122120
sort(logs.begin(), logs.end());
123-
for (auto log : logs)
121+
for (auto& log : logs)
124122
{
125-
int a = log[1], b = log[2];
126-
int pa = find(a), pb = find(b);
127-
if (pa == pb)
128-
continue;
129-
p[pa] = pb;
130-
--n;
131-
if (n == 1)
132-
return log[0];
123+
int t = log[0], a = log[1], b = log[2];
124+
if (find(a) == find(b)) continue;
125+
p[find(a)] = find(b);
126+
if (--n == 1) return t;
133127
}
134128
return -1;
135129
}
136130

137131
int find(int x) {
138-
if (p[x] != x)
139-
p[x] = find(p[x]);
132+
if (p[x] != x) p[x] = find(p[x]);
140133
return p[x];
141134
}
142135
};
@@ -145,37 +138,34 @@ public:
145138
### **Go**
146139
147140
```go
148-
var p []int
149-
150141
func earliestAcq(logs [][]int, n int) int {
151-
p = make([]int, n)
152-
for i := 0; i < n; i++ {
142+
p := make([]int, n)
143+
for i := range p {
153144
p[i] = i
154145
}
146+
var find func(x int) int
147+
find = func(x int) int {
148+
if p[x] != x {
149+
p[x] = find(p[x])
150+
}
151+
return p[x]
152+
}
155153
sort.Slice(logs, func(i, j int) bool {
156154
return logs[i][0] < logs[j][0]
157155
})
158156
for _, log := range logs {
159-
a, b := log[1], log[2]
160-
pa, pb := find(a), find(b)
161-
if pa == pb {
157+
t, a, b := log[0], log[1], log[2]
158+
if find(a) == find(b) {
162159
continue
163160
}
164-
p[pa] = pb
161+
p[find(a)] = find(b)
165162
n--
166163
if n == 1 {
167-
return log[0]
164+
return t
168165
}
169166
}
170167
return -1
171168
}
172-
173-
func find(x int) int {
174-
if p[x] != x {
175-
p[x] = find(p[x])
176-
}
177-
return p[x]
178-
}
179169
```
180170

181171
### **...**

solution/1100-1199/1101.The Earliest Moment When Everyone Become Friends/Solution.cpp

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,21 @@ class Solution {
33
vector<int> p;
44

55
int earliestAcq(vector<vector<int>>& logs, int n) {
6-
for (int i = 0; i < n; ++i)
7-
p.push_back(i);
6+
p.resize(n);
7+
for (int i = 0; i < n; ++i) p[i] = i;
88
sort(logs.begin(), logs.end());
9-
for (auto log : logs)
9+
for (auto& log : logs)
1010
{
11-
int a = log[1], b = log[2];
12-
int pa = find(a), pb = find(b);
13-
if (pa == pb)
14-
continue;
15-
p[pa] = pb;
16-
--n;
17-
if (n == 1)
18-
return log[0];
11+
int t = log[0], a = log[1], b = log[2];
12+
if (find(a) == find(b)) continue;
13+
p[find(a)] = find(b);
14+
if (--n == 1) return t;
1915
}
2016
return -1;
2117
}
2218

2319
int find(int x) {
24-
if (p[x] != x)
25-
p[x] = find(p[x]);
20+
if (p[x] != x) p[x] = find(p[x]);
2621
return p[x];
2722
}
2823
};
Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,28 @@
1-
var p []int
2-
31
func earliestAcq(logs [][]int, n int) int {
4-
p = make([]int, n)
5-
for i := 0; 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
sort.Slice(logs, func(i, j int) bool {
914
return logs[i][0] < logs[j][0]
1015
})
1116
for _, log := range logs {
12-
a, b := log[1], log[2]
13-
pa, pb := find(a), find(b)
14-
if pa == pb {
17+
t, a, b := log[0], log[1], log[2]
18+
if find(a) == find(b) {
1519
continue
1620
}
17-
p[pa] = pb
21+
p[find(a)] = find(b)
1822
n--
1923
if n == 1 {
20-
return log[0]
24+
return t
2125
}
2226
}
2327
return -1
24-
}
25-
26-
func find(x int) int {
27-
if p[x] != x {
28-
p[x] = find(p[x])
29-
}
30-
return p[x]
3128
}

solution/1100-1199/1101.The Earliest Moment When Everyone Become Friends/Solution.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,11 @@ public int earliestAcq(int[][] logs, int n) {
88
}
99
Arrays.sort(logs, Comparator.comparingInt(a -> a[0]));
1010
for (int[] log : logs) {
11-
int t = log[0];
12-
int a = log[1], b = log[2];
13-
int pa = find(a), pb = find(b);
14-
if (pa == pb) {
11+
int t = log[0], a = log[1], b = log[2];
12+
if (find(a) == find(b)) {
1513
continue;
1614
}
17-
p[pa] = pb;
15+
p[find(a)] = find(b);
1816
--n;
1917
if (n == 1) {
2018
return t;

solution/1100-1199/1101.The Earliest Moment When Everyone Become Friends/Solution.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
class Solution:
22
def earliestAcq(self, logs: List[List[int]], n: int) -> int:
3-
p = list(range(n))
4-
logs.sort(key=lambda x: x[0])
5-
63
def find(x):
74
if p[x] != x:
85
p[x] = find(p[x])
96
return p[x]
107

8+
p = list(range(n))
9+
logs.sort()
1110
for t, a, b in logs:
12-
pa, pb = find(a), find(b)
13-
if pa == pb:
11+
if find(a) == find(b):
1412
continue
15-
p[pa] = pb
13+
p[find(a)] = find(b)
1614
n -= 1
1715
if n == 1:
1816
return t

0 commit comments

Comments
 (0)