Network Delay Time LeetCode solution in JavaScript

1
/**
2
* @param {number[][]} times
3
* @param {number} n
4
* @param {number} k
5
* @return {number}
6
*/
7

8
let visited, edges, dijkastra_arr, min_heap;
9
const MAX_VALUE = Math.pow(10, 6);
10

11
const dijkastra = (source) => {
12
visited[source] = true;
13
min_heap.pop();
14
let nei = edges[source] || [];
15
// if(!nei.length)return;
16
for (let i = 0; i < nei.length; i++) {
17
let [src, dst, t] = nei[i];
18
if (visited[dst]) continue;
19
let time_till_src = dijkastra_arr[src];
20
if (time_till_src >= MAX_VALUE) continue;
21
let time_till_dst = time_till_src + t;
22
dijkastra_arr[dst] = Math.min(dijkastra_arr[dst], time_till_dst);
23
}
24
min_heap.sort((a, b) => {
25
return dijkastra_arr[b] - dijkastra_arr[a];
26
});
27
if (
28
min_heap.length &&
29
dijkastra_arr[min_heap[min_heap.length - 1]] < MAX_VALUE
30
)
31
dijkastra(min_heap[min_heap.length - 1]);
32
};
33
var networkDelayTime = function (times, n, k) {
34
visited = [];
35
edges = {};
36
dijkastra_arr = [];
37
min_heap = [];
38

39
for (let i = 0; i < times.length; i++) {
40
if (!edges[times[i][0]]) edges[times[i][0]] = [];
41
edges[times[i][0]].push(times[i]);
42
}
43
// console.log(edges,"edges")
44
for (let i = 0; i <= n; i++) {
45
if (i === 0) {
46
//cz numbes are starting from One
47
visited[i] = true;
48
dijkastra_arr[i] = -1;
49
min_heap[i] = i;
50
} else {
51
min_heap[i] = i;
52
dijkastra_arr[i] = MAX_VALUE;
53
visited[i] = false;
54
}
55
}
56

57
dijkastra_arr[k] = 0;
58
min_heap.sort((a, b) => {
59
return dijkastra_arr[b] - dijkastra_arr[a];
60
});
61
min_heap.pop(); //For removing zeroth entry;
62
dijkastra(k);
63
let max_time = 0;
64
if (min_heap.length) return -1;
65
for (let i = 0; i < dijkastra_arr.length; i++) {
66
max_time = Math.max(dijkastra_arr[i], max_time);
67
}
68
return max_time;
69
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0