LeetCode 0743. Network Delay Time Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
0743. Network Delay Time

Description

You are given a network of n nodes, labeled from 1 to n. You are also given times, a list of travel times as directed edges times[i] = (ui, vi, wi), where ui is the source node, vi is the target node, and wi is the time it takes for a signal to travel from source to target.

We will send a signal from a given node k. Return the minimum time it takes for all the n nodes to receive the signal. If it is impossible for all the n nodes to receive the signal, return -1.

 

Example 1:

Input: times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2
Output: 2

Example 2:

Input: times = [[1,2,1]], n = 2, k = 1
Output: 1

Example 3:

Input: times = [[1,2,1]], n = 2, k = 2
Output: -1

 

Constraints:

  • 1 <= k <= n <= 100
  • 1 <= times.length <= 6000
  • times[i].length == 3
  • 1 <= ui, vi <= n
  • ui != vi
  • 0 <= wi <= 100
  • All the pairs (ui, vi) are unique. (i.e., no multiple edges.)

Solutions

Solution 1: Naive Dijkstra Algorithm

We define g[u][v] to represent the edge weight from node u to node v. If there is no edge between node u and node v, then g[u][v] = +∞.

We maintain an array dist, where dist[i] represents the shortest path length from node k to node i. Initially, we set all dist[i] to +∞, except for dist[k - 1] = 0. We define an array vis, where vis[i] indicates whether node i has been visited. Initially, we set all vis[i] to false.

Each time, we find the unvisited node t with the smallest distance, and then perform relaxation operations centered on node t. For each node j, if dist[j] > dist[t] + g[t][j], we update dist[j] = dist[t] + g[t][j].

Finally, we return the maximum value in dist as the answer. If the answer is +∞, it means there are unreachable nodes, and we return -1.

The time complexity is O(n^2 + m), and the space complexity is O(n^2). Here, n and m are the number of nodes and edges, respectively.

PythonJavaC++GoTypeScript
class Solution: def networkDelayTime(self, times: List[List[int]], n: int, k: int) -> int: g = [[inf] * n for _ in range(n)] for u, v, w in times: g[u - 1][v - 1] = w dist = [inf] * n dist[k - 1] = 0 vis = [False] * n for _ in range(n): t = -1 for j in range(n): if not vis[j] and (t == -1 or dist[t] > dist[j]): t = j vis[t] = True for j in range(n): dist[j] = min(dist[j], dist[t] + g[t][j]) ans = max(dist) return -1 if ans == inf else ans(code-box)

Solution 2: Heap-Optimized Dijkstra Algorithm

We can use a priority queue (heap) to optimize the naive Dijkstra algorithm.

We define g[u] to represent all adjacent edges of node u, and dist[u] to represent the shortest path length from node k to node u. Initially, we set all dist[u] to +∞, except for dist[k - 1] = 0.

We define a priority queue pq, where each element is (d, u), representing the distance d from node u to node k. Each time, we take out the node (d, u) with the smallest distance from pq. If d >\textit{dist}[u], we skip this node. Otherwise, we traverse all adjacent edges of nodeu. For each adjacent edge(v, w), if\textit{dist}[v] > \textit{dist}[u] + w, we update\textit{dist}[v] = \textit{dist}[u] + wand add(\textit{dist}[v], v)to\textit{pq}$.

Finally, we return the maximum value in dist as the answer. If the answer is +∞, it means there are unreachable nodes, and we return -1.

The time complexity is O(m × log m + n), and the space complexity is O(n + m). Here, n and m are the number of nodes and edges, respectively.

PythonJavaC++GoTypeScript
class Solution: def networkDelayTime(self, times: List[List[int]], n: int, k: int) -> int: g = [[] for _ in range(n)] for u, v, w in times: g[u - 1].append((v - 1, w)) dist = [inf] * n dist[k - 1] = 0 pq = [(0, k - 1)] while pq: d, u = heappop(pq) if d > dist[u]: continue for v, w in g[u]: if (nd := d + w) < dist[v]: dist[v] = nd heappush(pq, (nd, v)) ans = max(dist) return -1 if ans == inf else ans(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !