Skip to content

Commit 70ba383

Browse files
committed
feat: update solutions to lc/lcof2 problems
* lc No.0785 & lcof2 No.106.Is Graph Bipartite * lc No.0329 & lcof2 No.112.Longest Increasing Path in a Matrix
1 parent d4e4621 commit 70ba383

File tree

20 files changed

+186
-214
lines changed

20 files changed

+186
-214
lines changed

lcof2/剑指 Offer II 106. 二分图/README.md

+14-17
Original file line numberDiff line numberDiff line change
@@ -133,14 +133,13 @@ d[find(a)] = distance
133133
```python
134134
class Solution:
135135
def isBipartite(self, graph: List[List[int]]) -> bool:
136-
n = len(graph)
137-
p = list(range(n))
138-
139136
def find(x):
140137
if p[x] != x:
141138
p[x] = find(p[x])
142139
return p[x]
143140

141+
n = len(graph)
142+
p = list(range(n))
144143
for u, g in enumerate(graph):
145144
for v in g:
146145
if find(u) == find(v):
@@ -197,14 +196,14 @@ public:
197196
for (int i = 0; i < n; ++i) p[i] = i;
198197
for (int u = 0; u < n; ++u)
199198
{
200-
auto g = graph[u];
199+
auto& g = graph[u];
201200
for (int v : g)
202201
{
203-
if (find(u) == find(v)) return false;
202+
if (find(u) == find(v)) return 0;
204203
p[find(v)] = find(g[0]);
205204
}
206205
}
207-
return true;
206+
return 1;
208207
}
209208

210209
int find(int x) {
@@ -217,14 +216,19 @@ public:
217216
### **Go**
218217
219218
```go
220-
var p []int
221-
222219
func isBipartite(graph [][]int) bool {
223220
n := len(graph)
224-
p = make([]int, n)
225-
for i := 0; i < n; i++ {
221+
p := make([]int, n)
222+
for i := range p {
226223
p[i] = i
227224
}
225+
var find func(x int) int
226+
find = func(x int) int {
227+
if p[x] != x {
228+
p[x] = find(p[x])
229+
}
230+
return p[x]
231+
}
228232
for u, g := range graph {
229233
for _, v := range g {
230234
if find(u) == find(v) {
@@ -235,13 +239,6 @@ func isBipartite(graph [][]int) bool {
235239
}
236240
return true
237241
}
238-
239-
func find(x int) int {
240-
if p[x] != x {
241-
p[x] = find(p[x])
242-
}
243-
return p[x]
244-
}
245242
```
246243

247244
### **...**

lcof2/剑指 Offer II 106. 二分图/Solution.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ class Solution {
88
for (int i = 0; i < n; ++i) p[i] = i;
99
for (int u = 0; u < n; ++u)
1010
{
11-
auto g = graph[u];
11+
auto& g = graph[u];
1212
for (int v : g)
1313
{
14-
if (find(u) == find(v)) return false;
14+
if (find(u) == find(v)) return 0;
1515
p[find(v)] = find(g[0]);
1616
}
1717
}
18-
return true;
18+
return 1;
1919
}
2020

2121
int find(int x) {
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
1-
var p []int
2-
31
func isBipartite(graph [][]int) bool {
42
n := len(graph)
5-
p = make([]int, n)
6-
for i := 0; i < n; i++ {
3+
p := make([]int, n)
4+
for i := range p {
75
p[i] = i
86
}
7+
var find func(x int) int
8+
find = func(x int) int {
9+
if p[x] != x {
10+
p[x] = find(p[x])
11+
}
12+
return p[x]
13+
}
914
for u, g := range graph {
1015
for _, v := range g {
1116
if find(u) == find(v) {
@@ -15,11 +20,4 @@ func isBipartite(graph [][]int) bool {
1520
}
1621
}
1722
return true
18-
}
19-
20-
func find(x int) int {
21-
if p[x] != x {
22-
p[x] = find(p[x])
23-
}
24-
return p[x]
2523
}

lcof2/剑指 Offer II 106. 二分图/Solution.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
class Solution:
22
def isBipartite(self, graph: List[List[int]]) -> bool:
3-
n = len(graph)
4-
p = list(range(n))
5-
63
def find(x):
74
if p[x] != x:
85
p[x] = find(p[x])
96
return p[x]
107

8+
n = len(graph)
9+
p = list(range(n))
1110
for u, g in enumerate(graph):
1211
for v in g:
1312
if find(u) == find(v):

lcof2/剑指 Offer II 112. 最长递增路径/README.md

+11-23
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,8 @@ class Solution:
7575
ans = max(ans, dfs(x, y) + 1)
7676
return ans
7777

78-
ans = 0
7978
m, n = len(matrix), len(matrix[0])
80-
for i in range(m):
81-
for j in range(n):
82-
ans = max(ans, dfs(i, j))
83-
return ans
79+
return max(dfs(i, j) for i in range(m) for j in range(n))
8480
```
8581

8682
### **Java**
@@ -89,7 +85,6 @@ class Solution:
8985

9086
```java
9187
class Solution {
92-
9388
private int[][] memo;
9489
private int[][] matrix;
9590
private int m;
@@ -117,24 +112,17 @@ class Solution {
117112
return memo[i][j];
118113
}
119114
int ans = 1;
120-
int[][] dirs = { { 0, -1 }, { 0, 1 }, { 1, 0 }, { -1, 0 } };
121-
for (int[] dir : dirs) {
122-
int x = i + dir[0], y = j + dir[1];
123-
if (
124-
x >= 0 &&
125-
x < m &&
126-
y >= 0 &&
127-
y < n &&
128-
matrix[x][y] > matrix[i][j]
129-
) {
115+
int[] dirs = {-1, 0, 1, 0, -1};
116+
for (int k = 0; k < 4; ++k) {
117+
int x = i + dirs[k], y = j + dirs[k + 1];
118+
if (x >= 0 && x < m && y >= 0 && y < n && matrix[x][y] > matrix[i][j]) {
130119
ans = Math.max(ans, dfs(x, y) + 1);
131120
}
132121
}
133122
memo[i][j] = ans;
134123
return ans;
135124
}
136125
}
137-
138126
```
139127

140128
### **C++**
@@ -162,10 +150,10 @@ public:
162150
int dfs(int i, int j) {
163151
if (memo[i][j] != -1) return memo[i][j];
164152
int ans = 1;
165-
vector<vector<int>> dirs = {{0, -1}, {0, 1}, {1, 0}, {-1, 0}};
166-
for (auto& dir : dirs)
153+
vector<int> dirs = {-1, 0, 1, 0, -1};
154+
for (int k = 0; k < 4; ++k)
167155
{
168-
int x = i + dir[0], y = j + dir[1];
156+
int x = i + dirs[k], y = j + dirs[k + 1];
169157
if (x >= 0 && x < m && y >= 0 && y < n && matrix[x][y] > matrix[i][j])
170158
ans = max(ans, dfs(x, y) + 1);
171159
}
@@ -194,9 +182,9 @@ func longestIncreasingPath(matrix [][]int) int {
194182
return memo[i][j]
195183
}
196184
ans := 1
197-
dirs := [4][2]int{{-1, 0}, {1, 0}, {0, 1}, {0, -1}}
198-
for _, dir := range dirs {
199-
x, y := i+dir[0], j+dir[1]
185+
dirs := []int{-1, 0, 1, 0, -1}
186+
for k := 0; k < 4; k++ {
187+
x, y := i+dirs[k], j+dirs[k+1]
200188
if x >= 0 && x < m && y >= 0 && y < n && matrix[x][y] > matrix[i][j] {
201189
ans = max(ans, dfs(x, y)+1)
202190
}

lcof2/剑指 Offer II 112. 最长递增路径/Solution.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ class Solution {
2020
int dfs(int i, int j) {
2121
if (memo[i][j] != -1) return memo[i][j];
2222
int ans = 1;
23-
vector<vector<int>> dirs = {{0, -1}, {0, 1}, {1, 0}, {-1, 0}};
24-
for (auto& dir : dirs)
23+
vector<int> dirs = {-1, 0, 1, 0, -1};
24+
for (int k = 0; k < 4; ++k)
2525
{
26-
int x = i + dir[0], y = j + dir[1];
26+
int x = i + dirs[k], y = j + dirs[k + 1];
2727
if (x >= 0 && x < m && y >= 0 && y < n && matrix[x][y] > matrix[i][j])
2828
ans = max(ans, dfs(x, y) + 1);
2929
}

lcof2/剑指 Offer II 112. 最长递增路径/Solution.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ func longestIncreasingPath(matrix [][]int) int {
1414
return memo[i][j]
1515
}
1616
ans := 1
17-
dirs := [4][2]int{{-1, 0}, {1, 0}, {0, 1}, {0, -1}}
18-
for _, dir := range dirs {
19-
x, y := i+dir[0], j+dir[1]
17+
dirs := []int{-1, 0, 1, 0, -1}
18+
for k := 0; k < 4; k++ {
19+
x, y := i+dirs[k], j+dirs[k+1]
2020
if x >= 0 && x < m && y >= 0 && y < n && matrix[x][y] > matrix[i][j] {
2121
ans = max(ans, dfs(x, y)+1)
2222
}

lcof2/剑指 Offer II 112. 最长递增路径/Solution.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ private int dfs(int i, int j) {
2626
return memo[i][j];
2727
}
2828
int ans = 1;
29-
int[][] dirs = {{0, -1}, {0, 1}, {1, 0}, {-1, 0}};
30-
for (int[] dir : dirs) {
31-
int x = i + dir[0], y = j + dir[1];
29+
int[] dirs = {-1, 0, 1, 0, -1};
30+
for (int k = 0; k < 4; ++k) {
31+
int x = i + dirs[k], y = j + dirs[k + 1];
3232
if (x >= 0 && x < m && y >= 0 && y < n && matrix[x][y] > matrix[i][j]) {
3333
ans = Math.max(ans, dfs(x, y) + 1);
3434
}

lcof2/剑指 Offer II 112. 最长递增路径/Solution.py

+1-5
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,5 @@ def dfs(i, j):
99
ans = max(ans, dfs(x, y) + 1)
1010
return ans
1111

12-
ans = 0
1312
m, n = len(matrix), len(matrix[0])
14-
for i in range(m):
15-
for j in range(n):
16-
ans = max(ans, dfs(i, j))
17-
return ans
13+
return max(dfs(i, j) for i in range(m) for j in range(n))

solution/0300-0399/0329.Longest Increasing Path in a Matrix/README.md

+11-23
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,8 @@ class Solution:
6969
ans = max(ans, dfs(x, y) + 1)
7070
return ans
7171

72-
ans = 0
7372
m, n = len(matrix), len(matrix[0])
74-
for i in range(m):
75-
for j in range(n):
76-
ans = max(ans, dfs(i, j))
77-
return ans
73+
return max(dfs(i, j) for i in range(m) for j in range(n))
7874
```
7975

8076
### **Java**
@@ -83,7 +79,6 @@ class Solution:
8379

8480
```java
8581
class Solution {
86-
8782
private int[][] memo;
8883
private int[][] matrix;
8984
private int m;
@@ -111,24 +106,17 @@ class Solution {
111106
return memo[i][j];
112107
}
113108
int ans = 1;
114-
int[][] dirs = { { 0, -1 }, { 0, 1 }, { 1, 0 }, { -1, 0 } };
115-
for (int[] dir : dirs) {
116-
int x = i + dir[0], y = j + dir[1];
117-
if (
118-
x >= 0 &&
119-
x < m &&
120-
y >= 0 &&
121-
y < n &&
122-
matrix[x][y] > matrix[i][j]
123-
) {
109+
int[] dirs = {-1, 0, 1, 0, -1};
110+
for (int k = 0; k < 4; ++k) {
111+
int x = i + dirs[k], y = j + dirs[k + 1];
112+
if (x >= 0 && x < m && y >= 0 && y < n && matrix[x][y] > matrix[i][j]) {
124113
ans = Math.max(ans, dfs(x, y) + 1);
125114
}
126115
}
127116
memo[i][j] = ans;
128117
return ans;
129118
}
130119
}
131-
132120
```
133121

134122
### **C++**
@@ -156,10 +144,10 @@ public:
156144
int dfs(int i, int j) {
157145
if (memo[i][j] != -1) return memo[i][j];
158146
int ans = 1;
159-
vector<vector<int>> dirs = {{0, -1}, {0, 1}, {1, 0}, {-1, 0}};
160-
for (auto& dir : dirs)
147+
vector<int> dirs = {-1, 0, 1, 0, -1};
148+
for (int k = 0; k < 4; ++k)
161149
{
162-
int x = i + dir[0], y = j + dir[1];
150+
int x = i + dirs[k], y = j + dirs[k + 1];
163151
if (x >= 0 && x < m && y >= 0 && y < n && matrix[x][y] > matrix[i][j])
164152
ans = max(ans, dfs(x, y) + 1);
165153
}
@@ -188,9 +176,9 @@ func longestIncreasingPath(matrix [][]int) int {
188176
return memo[i][j]
189177
}
190178
ans := 1
191-
dirs := [4][2]int{{-1, 0}, {1, 0}, {0, 1}, {0, -1}}
192-
for _, dir := range dirs {
193-
x, y := i+dir[0], j+dir[1]
179+
dirs := []int{-1, 0, 1, 0, -1}
180+
for k := 0; k < 4; k++ {
181+
x, y := i+dirs[k], j+dirs[k+1]
194182
if x >= 0 && x < m && y >= 0 && y < n && matrix[x][y] > matrix[i][j] {
195183
ans = max(ans, dfs(x, y)+1)
196184
}

0 commit comments

Comments
 (0)