Skip to content

Commit dedd906

Browse files
committed
feat: add solutions to lc problem: No.0743
No.0743.Network Delay Time
1 parent a3a1731 commit dedd906

File tree

2 files changed

+215
-0
lines changed

2 files changed

+215
-0
lines changed

solution/0700-0799/0743.Network Delay Time/README.md

+111
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,16 @@
5757

5858
**方法一:朴素 Dijkstra 算法**
5959

60+
时间复杂度 O(n²)。
61+
6062
**方法二:堆优化 Dijkstra 算法**
6163

64+
时间复杂度 O(nlogm)。
65+
66+
**方法三:Bellman Ford 算法**
67+
68+
时间复杂度 O(nm)。
69+
6270
<!-- tabs:start -->
6371

6472
### **Python3**
@@ -114,6 +122,20 @@ class Solution:
114122
return -1 if ans == INF else ans
115123
```
116124

125+
```python
126+
class Solution:
127+
def networkDelayTime(self, times: List[List[int]], n: int, k: int) -> int:
128+
INF = 0x3f3f
129+
dist = [INF] * n
130+
dist[k - 1] = 0
131+
for _ in range(n):
132+
backup = dist[:]
133+
for u, v, w in times:
134+
dist[v - 1] = min(dist[v - 1], dist[u - 1] + w)
135+
ans = max(dist)
136+
return -1 if ans == INF else ans
137+
```
138+
117139
### **Java**
118140

119141
<!-- 这里可写当前语言的特殊实现逻辑 -->
@@ -199,6 +221,31 @@ class Solution {
199221
}
200222
```
201223

224+
```java
225+
class Solution {
226+
private static final int INF = 0x3f3f;
227+
228+
public int networkDelayTime(int[][] times, int n, int k) {
229+
int[] dist = new int[n];
230+
int[] backup = new int[n];
231+
Arrays.fill(dist, INF);
232+
dist[k - 1] = 0;
233+
for (int i = 0; i < n; ++i) {
234+
System.arraycopy(dist, 0, backup, 0, n);
235+
for (int[] t : times) {
236+
int u = t[0] - 1, v = t[1] - 1, w = t[2];
237+
dist[v] = Math.min(dist[v], backup[u] + w);
238+
}
239+
}
240+
int ans = 0;
241+
for (int i = 0; i < n; ++i) {
242+
ans = Math.max(ans, dist[i]);
243+
}
244+
return ans == INF ? -1 : ans;
245+
}
246+
}
247+
```
248+
202249
### **Go**
203250

204251
```go
@@ -326,6 +373,47 @@ func max(x, y int) int {
326373
}
327374
```
328375

376+
```go
377+
func networkDelayTime(times [][]int, n int, k int) int {
378+
const inf = 0x3f3f
379+
dist := make([]int, n)
380+
backup := make([]int, n)
381+
for i := range dist {
382+
dist[i] = inf
383+
}
384+
dist[k-1] = 0
385+
for i := 0; i < n; i++ {
386+
copy(backup, dist)
387+
for _, e := range times {
388+
u, v, w := e[0]-1, e[1]-1, e[2]
389+
dist[v] = min(dist[v], backup[u]+w)
390+
}
391+
}
392+
ans := 0
393+
for _, v := range dist {
394+
ans = max(ans, v)
395+
}
396+
if ans == inf {
397+
return -1
398+
}
399+
return ans
400+
}
401+
402+
func max(a, b int) int {
403+
if a > b {
404+
return a
405+
}
406+
return b
407+
}
408+
409+
func min(a, b int) int {
410+
if a < b {
411+
return a
412+
}
413+
return b
414+
}
415+
```
416+
329417
### **C++**
330418

331419
```cpp
@@ -362,6 +450,29 @@ public:
362450
};
363451
```
364452

453+
```cpp
454+
class Solution {
455+
public:
456+
int inf = 0x3f3f;
457+
458+
int networkDelayTime(vector<vector<int>>& times, int n, int k) {
459+
vector<int> dist(n, inf);
460+
dist[k - 1] = 0;
461+
for (int i = 0; i < n; ++i)
462+
{
463+
vector<int> backup = dist;
464+
for (auto& e : times)
465+
{
466+
int u = e[0] - 1, v = e[1] - 1, w = e[2];
467+
dist[v] = min(dist[v], backup[u] + w);
468+
}
469+
}
470+
int ans = *max_element(dist.begin(), dist.end());
471+
return ans == inf ? -1 : ans;
472+
}
473+
};
474+
```
475+
365476
### **...**
366477
367478
```

solution/0700-0799/0743.Network Delay Time/README_EN.md

+104
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,20 @@ class Solution:
9898
return -1 if ans == INF else ans
9999
```
100100

101+
```python
102+
class Solution:
103+
def networkDelayTime(self, times: List[List[int]], n: int, k: int) -> int:
104+
INF = 0x3f3f
105+
dist = [INF] * n
106+
dist[k - 1] = 0
107+
for _ in range(n):
108+
backup = dist[:]
109+
for u, v, w in times:
110+
dist[v - 1] = min(dist[v - 1], dist[u - 1] + w)
111+
ans = max(dist)
112+
return -1 if ans == INF else ans
113+
```
114+
101115
### **Java**
102116

103117
```java
@@ -181,6 +195,31 @@ class Solution {
181195
}
182196
```
183197

198+
```java
199+
class Solution {
200+
private static final int INF = 0x3f3f;
201+
202+
public int networkDelayTime(int[][] times, int n, int k) {
203+
int[] dist = new int[n];
204+
int[] backup = new int[n];
205+
Arrays.fill(dist, INF);
206+
dist[k - 1] = 0;
207+
for (int i = 0; i < n; ++i) {
208+
System.arraycopy(dist, 0, backup, 0, n);
209+
for (int[] t : times) {
210+
int u = t[0] - 1, v = t[1] - 1, w = t[2];
211+
dist[v] = Math.min(dist[v], backup[u] + w);
212+
}
213+
}
214+
int ans = 0;
215+
for (int i = 0; i < n; ++i) {
216+
ans = Math.max(ans, dist[i]);
217+
}
218+
return ans == INF ? -1 : ans;
219+
}
220+
}
221+
```
222+
184223
### **Go**
185224

186225
```go
@@ -308,6 +347,47 @@ func max(x, y int) int {
308347
}
309348
```
310349

350+
```go
351+
func networkDelayTime(times [][]int, n int, k int) int {
352+
const inf = 0x3f3f
353+
dist := make([]int, n)
354+
backup := make([]int, n)
355+
for i := range dist {
356+
dist[i] = inf
357+
}
358+
dist[k-1] = 0
359+
for i := 0; i < n; i++ {
360+
copy(backup, dist)
361+
for _, e := range times {
362+
u, v, w := e[0]-1, e[1]-1, e[2]
363+
dist[v] = min(dist[v], backup[u]+w)
364+
}
365+
}
366+
ans := 0
367+
for _, v := range dist {
368+
ans = max(ans, v)
369+
}
370+
if ans == inf {
371+
return -1
372+
}
373+
return ans
374+
}
375+
376+
func max(a, b int) int {
377+
if a > b {
378+
return a
379+
}
380+
return b
381+
}
382+
383+
func min(a, b int) int {
384+
if a < b {
385+
return a
386+
}
387+
return b
388+
}
389+
```
390+
311391
### **C++**
312392

313393
```cpp
@@ -344,6 +424,30 @@ public:
344424
};
345425
```
346426

427+
428+
```cpp
429+
class Solution {
430+
public:
431+
int inf = 0x3f3f;
432+
433+
int networkDelayTime(vector<vector<int>>& times, int n, int k) {
434+
vector<int> dist(n, inf);
435+
dist[k - 1] = 0;
436+
for (int i = 0; i < n; ++i)
437+
{
438+
vector<int> backup = dist;
439+
for (auto& e : times)
440+
{
441+
int u = e[0] - 1, v = e[1] - 1, w = e[2];
442+
dist[v] = min(dist[v], backup[u] + w);
443+
}
444+
}
445+
int ans = *max_element(dist.begin(), dist.end());
446+
return ans == inf ? -1 : ans;
447+
}
448+
};
449+
```
450+
347451
### **...**
348452
349453
```

0 commit comments

Comments
 (0)