Skip to content

Commit 4c5bef3

Browse files
committed
fix: update solutions to lc problem: No.0886
No.0886.Possible Bipartition
1 parent 72cc1bd commit 4c5bef3

File tree

6 files changed

+165
-201
lines changed

6 files changed

+165
-201
lines changed

solution/0800-0899/0886.Possible Bipartition/README.md

Lines changed: 56 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -133,17 +133,18 @@ class Solution:
133133
if p[x] != x:
134134
p[x] = find(p[x])
135135
return p[x]
136-
137-
mp = defaultdict(list)
138-
for i, j in dislikes:
139-
mp[i - 1].append(j - 1)
140-
mp[j - 1].append(i - 1)
136+
137+
dis = defaultdict(list)
138+
for a, b in dislikes:
139+
a, b = a - 1, b - 1
140+
dis[a].append(b)
141+
dis[b].append(a)
142+
141143
for i in range(n):
142-
dis = mp[i]
143-
for j in dis:
144+
for j in dis[i]:
144145
if find(i) == find(j):
145146
return False
146-
p[find(j)] = find(dis[0])
147+
p[find(j)] = find(dis[i][0])
147148
return True
148149
```
149150

@@ -153,35 +154,38 @@ class Solution:
153154

154155
```java
155156
class Solution {
156-
public:
157-
vector<int> p;
158-
159-
bool possibleBipartition(int n, vector<vector<int>>& dislikes) {
160-
p.resize(n);
161-
for (int i = 0; i < n; ++i) p[i] = i;
162-
unordered_map<int, vector<int>> mp;
163-
for (auto e : dislikes)
164-
{
165-
mp[e[0] - 1].push_back(e[1] - 1);
166-
mp[e[1] - 1].push_back(e[0] - 1);
157+
private int[] p;
158+
159+
public boolean possibleBipartition(int n, int[][] dislikes) {
160+
p = new int[n];
161+
List<Integer>[] dis = new List[n];
162+
for (int i = 0; i < n; ++i) {
163+
p[i] = i;
164+
dis[i] = new ArrayList<>();
167165
}
168-
for (int i = 0; i < n; ++i)
169-
{
170-
auto dis = mp[i];
171-
for (int j : dis)
172-
{
173-
if (find(i) == find(j)) return false;
174-
p[find(j)] = find(dis[0]);
166+
for (int[] d : dislikes) {
167+
int a = d[0] - 1, b = d[1] - 1;
168+
dis[a].add(b);
169+
dis[b].add(a);
170+
}
171+
for (int i = 0; i < n; ++i) {
172+
for (int j : dis[i]) {
173+
if (find(i) == find(j)) {
174+
return false;
175+
}
176+
p[find(j)] = find(dis[i].get(0));
175177
}
176178
}
177179
return true;
178180
}
179181

180-
int find(int x) {
181-
if (p[x] != x) p[x] = find(p[x]);
182+
private int find(int x) {
183+
if (p[x] != x) {
184+
p[x] = find(p[x]);
185+
}
182186
return p[x];
183187
}
184-
};
188+
}
185189
```
186190

187191
### **C++**
@@ -194,19 +198,19 @@ public:
194198
bool possibleBipartition(int n, vector<vector<int>>& dislikes) {
195199
p.resize(n);
196200
for (int i = 0; i < n; ++i) p[i] = i;
197-
unordered_map<int, vector<int>> mp;
198-
for (auto e : dislikes)
201+
unordered_map<int, vector<int>> dis;
202+
for (auto& d : dislikes)
199203
{
200-
mp[e[0] - 1].push_back(e[1] - 1);
201-
mp[e[1] - 1].push_back(e[0] - 1);
204+
int a = d[0] - 1, b = d[1] - 1;
205+
dis[a].push_back(b);
206+
dis[b].push_back(a);
202207
}
203208
for (int i = 0; i < n; ++i)
204209
{
205-
auto dis = mp[i];
206-
for (int j : dis)
210+
for (int j : dis[i])
207211
{
208212
if (find(i) == find(j)) return false;
209-
p[find(j)] = find(dis[0]);
213+
p[find(j)] = find(dis[i][0]);
210214
}
211215
}
212216
return true;
@@ -222,36 +226,34 @@ public:
222226
### **Go**
223227

224228
```go
225-
var p []int
226-
227229
func possibleBipartition(n int, dislikes [][]int) bool {
228-
p = make([]int, n)
229-
for i := 0; i < n; i++ {
230+
p := make([]int, n)
231+
dis := make([][]int, n)
232+
for i := range p {
230233
p[i] = i
231234
}
232-
mp := make(map[int][]int)
233-
for _, e := range dislikes {
234-
mp[e[0]-1] = append(mp[e[0]-1], e[1]-1)
235-
mp[e[1]-1] = append(mp[e[1]-1], e[0]-1)
235+
var find func(x int) int
236+
find = func(x int) int {
237+
if p[x] != x {
238+
p[x] = find(p[x])
239+
}
240+
return p[x]
241+
}
242+
for _, d := range dislikes {
243+
a, b := d[0]-1, d[1]-1
244+
dis[a] = append(dis[a], b)
245+
dis[b] = append(dis[b], a)
236246
}
237247
for i := 0; i < n; i++ {
238-
dis := mp[i]
239-
for _, j := range dis {
248+
for _, j := range dis[i] {
240249
if find(i) == find(j) {
241250
return false
242251
}
243-
p[find(j)] = find(dis[0])
252+
p[find(j)] = find(dis[i][0])
244253
}
245254
}
246255
return true
247256
}
248-
249-
func find(x int) int {
250-
if p[x] != x {
251-
p[x] = find(p[x])
252-
}
253-
return p[x]
254-
}
255257
```
256258

257259
### **...**

0 commit comments

Comments
 (0)