Skip to content

Commit b75ff7b

Browse files
committed
feat: add solutions to lc problems
* No.0787.Cheapest Flights Within K Stops * No.0868.Binary Gap
1 parent b743f21 commit b75ff7b

File tree

12 files changed

+419
-145
lines changed

12 files changed

+419
-145
lines changed

solution/0700-0799/0787.Cheapest Flights Within K Stops/README.md

Lines changed: 89 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,29 @@ src = 0, dst = 2, k = 0
5858

5959
<!-- 这里可写通用的实现逻辑 -->
6060

61-
DFS + 记忆化搜索。
61+
**方法一:Bellman Ford 算法**
62+
63+
**方法二:DFS + 记忆化搜索**
6264

6365
<!-- tabs:start -->
6466

6567
### **Python3**
6668

6769
<!-- 这里可写当前语言的特殊实现逻辑 -->
6870

71+
```python
72+
class Solution:
73+
def findCheapestPrice(self, n: int, flights: List[List[int]], src: int, dst: int, k: int) -> int:
74+
INF = 0x3f3f3f3f
75+
dist = [INF] * n
76+
dist[src] = 0
77+
for _ in range(k + 1):
78+
backup = dist.copy()
79+
for f, t, p in flights:
80+
dist[t] = min(dist[t], backup[f] + p)
81+
return -1 if dist[dst] == INF else dist[dst]
82+
```
83+
6984
```python
7085
from functools import lru_cache
7186

@@ -95,6 +110,27 @@ class Solution:
95110

96111
<!-- 这里可写当前语言的特殊实现逻辑 -->
97112

113+
```java
114+
class Solution {
115+
private static final int INF = 0x3f3f3f3f;
116+
117+
public int findCheapestPrice(int n, int[][] flights, int src, int dst, int k) {
118+
int[] dist = new int[n];
119+
int[] backup = new int[n];
120+
Arrays.fill(dist, INF);
121+
dist[src] = 0;
122+
for (int i = 0; i < k + 1; ++i) {
123+
System.arraycopy(dist, 0, backup, 0, n);
124+
for (int[] e : flights) {
125+
int f = e[0], t = e[1], p = e[2];
126+
dist[t] = Math.min(dist[t], backup[f] + p);
127+
}
128+
}
129+
return dist[dst] == INF ? -1 : dist[dst];
130+
}
131+
}
132+
```
133+
98134
```java
99135
class Solution {
100136
private int[][] memo;
@@ -141,6 +177,28 @@ class Solution {
141177

142178
### **C++**
143179

180+
```cpp
181+
class Solution {
182+
public:
183+
int findCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int k) {
184+
const int inf = 0x3f3f3f3f;
185+
vector<int> dist(n, inf);
186+
vector<int> backup;
187+
dist[src] = 0;
188+
for (int i = 0; i < k + 1; ++i)
189+
{
190+
backup = dist;
191+
for (auto& e : flights)
192+
{
193+
int f = e[0], t = e[1], p = e[2];
194+
dist[t] = min(dist[t], backup[f] + p);
195+
}
196+
}
197+
return dist[dst] == inf ? -1 : dist[dst];
198+
}
199+
};
200+
```
201+
144202
```cpp
145203
class Solution {
146204
public:
@@ -175,6 +233,36 @@ public:
175233

176234
### **Go**
177235

236+
```go
237+
func findCheapestPrice(n int, flights [][]int, src int, dst int, k int) int {
238+
const inf = 0x3f3f3f3f
239+
dist := make([]int, n)
240+
backup := make([]int, n)
241+
for i := range dist {
242+
dist[i] = inf
243+
}
244+
dist[src] = 0
245+
for i := 0; i < k+1; i++ {
246+
copy(backup, dist)
247+
for _, e := range flights {
248+
f, t, p := e[0], e[1], e[2]
249+
dist[t] = min(dist[t], backup[f]+p)
250+
}
251+
}
252+
if dist[dst] == inf {
253+
return -1
254+
}
255+
return dist[dst]
256+
}
257+
258+
func min(a, b int) int {
259+
if a < b {
260+
return a
261+
}
262+
return b
263+
}
264+
```
265+
178266
```go
179267
func findCheapestPrice(n int, flights [][]int, src int, dst int, k int) int {
180268
n += 10

solution/0700-0799/0787.Cheapest Flights Within K Stops/README_EN.md

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,19 @@ The optimal path with no stops from city 0 to 2 is marked in red and has cost 50
6161

6262
### **Python3**
6363

64+
```python
65+
class Solution:
66+
def findCheapestPrice(self, n: int, flights: List[List[int]], src: int, dst: int, k: int) -> int:
67+
INF = 0x3f3f3f3f
68+
dist = [INF] * n
69+
dist[src] = 0
70+
for _ in range(k + 1):
71+
backup = dist.copy()
72+
for f, t, p in flights:
73+
dist[t] = min(dist[t], backup[f] + p)
74+
return -1 if dist[dst] == INF else dist[dst]
75+
```
76+
6477
```python
6578
from functools import lru_cache
6679

@@ -88,6 +101,27 @@ class Solution:
88101

89102
### **Java**
90103

104+
```java
105+
class Solution {
106+
private static final int INF = 0x3f3f3f3f;
107+
108+
public int findCheapestPrice(int n, int[][] flights, int src, int dst, int k) {
109+
int[] dist = new int[n];
110+
int[] backup = new int[n];
111+
Arrays.fill(dist, INF);
112+
dist[src] = 0;
113+
for (int i = 0; i < k + 1; ++i) {
114+
System.arraycopy(dist, 0, backup, 0, n);
115+
for (int[] e : flights) {
116+
int f = e[0], t = e[1], p = e[2];
117+
dist[t] = Math.min(dist[t], backup[f] + p);
118+
}
119+
}
120+
return dist[dst] == INF ? -1 : dist[dst];
121+
}
122+
}
123+
```
124+
91125
```java
92126
class Solution {
93127
private int[][] memo;
@@ -134,6 +168,28 @@ class Solution {
134168

135169
### **C++**
136170

171+
```cpp
172+
class Solution {
173+
public:
174+
int findCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int k) {
175+
const int inf = 0x3f3f3f3f;
176+
vector<int> dist(n, inf);
177+
vector<int> backup;
178+
dist[src] = 0;
179+
for (int i = 0; i < k + 1; ++i)
180+
{
181+
backup = dist;
182+
for (auto& e : flights)
183+
{
184+
int f = e[0], t = e[1], p = e[2];
185+
dist[t] = min(dist[t], backup[f] + p);
186+
}
187+
}
188+
return dist[dst] == inf ? -1 : dist[dst];
189+
}
190+
};
191+
```
192+
137193
```cpp
138194
class Solution {
139195
public:
@@ -168,6 +224,36 @@ public:
168224

169225
### **Go**
170226

227+
```go
228+
func findCheapestPrice(n int, flights [][]int, src int, dst int, k int) int {
229+
const inf = 0x3f3f3f3f
230+
dist := make([]int, n)
231+
backup := make([]int, n)
232+
for i := range dist {
233+
dist[i] = inf
234+
}
235+
dist[src] = 0
236+
for i := 0; i < k+1; i++ {
237+
copy(backup, dist)
238+
for _, e := range flights {
239+
f, t, p := e[0], e[1], e[2]
240+
dist[t] = min(dist[t], backup[f]+p)
241+
}
242+
}
243+
if dist[dst] == inf {
244+
return -1
245+
}
246+
return dist[dst]
247+
}
248+
249+
func min(a, b int) int {
250+
if a < b {
251+
return a
252+
}
253+
return b
254+
}
255+
```
256+
171257
```go
172258
func findCheapestPrice(n int, flights [][]int, src int, dst int, k int) int {
173259
n += 10
Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,19 @@
1-
class Solution {
2-
public:
3-
vector<vector<int>> memo;
4-
vector<vector<int>> g;
5-
int dst;
6-
int inf = 1e6;
7-
8-
int findCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int k) {
9-
n += 10;
10-
memo.resize(n, vector<int>(n, -1));
11-
g.resize(n, vector<int>(n));
12-
for (auto& e : flights) g[e[0]][e[1]] = e[2];
13-
this->dst = dst;
14-
int ans = dfs(src, k + 1);
15-
return ans >= inf ? -1 : ans;
16-
}
17-
18-
int dfs(int u, int k) {
19-
if (memo[u][k] != -1) return memo[u][k];
20-
if (u == dst) return 0;
21-
if (k <= 0) return inf;
22-
int ans = inf;
23-
for (int v = 0; v < g[u].size(); ++v)
24-
if (g[u][v] > 0)
25-
ans = min(ans, dfs(v, k - 1) + g[u][v]);
26-
memo[u][k] = ans;
27-
return memo[u][k];
28-
}
1+
class Solution {
2+
public:
3+
int findCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int k) {
4+
const int inf = 0x3f3f3f3f;
5+
vector<int> dist(n, inf);
6+
vector<int> backup;
7+
dist[src] = 0;
8+
for (int i = 0; i < k + 1; ++i)
9+
{
10+
backup = dist;
11+
for (auto& e : flights)
12+
{
13+
int f = e[0], t = e[1], p = e[2];
14+
dist[t] = min(dist[t], backup[f] + p);
15+
}
16+
}
17+
return dist[dst] == inf ? -1 : dist[dst];
18+
}
2919
};
Lines changed: 26 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,27 @@
1-
func findCheapestPrice(n int, flights [][]int, src int, dst int, k int) int {
2-
n += 10
3-
memo := make([][]int, n)
4-
g := make([][]int, n)
5-
for i := range memo {
6-
memo[i] = make([]int, n)
7-
g[i] = make([]int, n)
8-
for j := range memo[i] {
9-
memo[i][j] = -1
10-
}
11-
}
12-
13-
for _, e := range flights {
14-
g[e[0]][e[1]] = e[2]
15-
}
16-
inf := int(1e6)
17-
var dfs func(u, k int) int
18-
dfs = func(u, k int) int {
19-
if memo[u][k] != -1 {
20-
return memo[u][k]
21-
}
22-
if u == dst {
23-
return 0
24-
}
25-
if k <= 0 {
26-
return inf
27-
}
28-
ans := inf
29-
for v, p := range g[u] {
30-
if p > 0 {
31-
ans = min(ans, dfs(v, k-1)+p)
32-
}
33-
}
34-
memo[u][k] = ans
35-
return ans
36-
}
37-
ans := dfs(src, k+1)
38-
if ans >= inf {
39-
return -1
40-
}
41-
return ans
42-
}
43-
44-
func min(a, b int) int {
45-
if a < b {
46-
return a
47-
}
48-
return b
1+
func findCheapestPrice(n int, flights [][]int, src int, dst int, k int) int {
2+
const inf = 0x3f3f3f3f
3+
dist := make([]int, n)
4+
backup := make([]int, n)
5+
for i := range dist {
6+
dist[i] = inf
7+
}
8+
dist[src] = 0
9+
for i := 0; i < k+1; i++ {
10+
copy(backup, dist)
11+
for _, e := range flights {
12+
f, t, p := e[0], e[1], e[2]
13+
dist[t] = min(dist[t], backup[f]+p)
14+
}
15+
}
16+
if dist[dst] == inf {
17+
return -1
18+
}
19+
return dist[dst]
20+
}
21+
22+
func min(a, b int) int {
23+
if a < b {
24+
return a
25+
}
26+
return b
4927
}

0 commit comments

Comments
 (0)