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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy