forked from AnasImloul/Leetcode-Solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNetwork Delay Time.js
68 lines (62 loc) · 1.8 KB
/
Network Delay Time.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// Runtime: 152 ms (Top 76.44%) | Memory: 52.1 MB (Top 42.07%)
/**
* @param {number[][]} times
* @param {number} n
* @param {number} k
* @return {number}
*/
let visited,edges,dijkastra_arr,min_heap
const MAX_VALUE=Math.pow(10,6);
const dijkastra=(source)=>{
visited[source]=true;
min_heap.pop();
let nei=edges[source]||[];
// if(!nei.length)return;
for(let i=0;i<nei.length;i++){
let[src,dst,t]=nei[i];
if(visited[dst])continue;
let time_till_src=dijkastra_arr[src];
if(time_till_src>=MAX_VALUE)continue;
let time_till_dst=time_till_src+t;
dijkastra_arr[dst]=Math.min(dijkastra_arr[dst],time_till_dst);
}
min_heap.sort((a,b)=>{
return dijkastra_arr[b]-dijkastra_arr[a];
});
if(min_heap.length && dijkastra_arr[min_heap[min_heap.length-1]]<MAX_VALUE)
dijkastra(min_heap[min_heap.length-1]);
}
var networkDelayTime = function(times, n, k) {
visited=[];
edges={};
dijkastra_arr=[];
min_heap=[];
for(let i=0;i<times.length;i++){
if(!edges[times[i][0]])edges[times[i][0]]=[];
edges[times[i][0]].push(times[i]);
}
// console.log(edges,"edges")
for(let i=0;i<=n;i++){
if(i===0){//cz numbes are starting from One
visited[i]=true;
dijkastra_arr[i]=-1;
min_heap[i]=i;
}else{
min_heap[i]=i;
dijkastra_arr[i]=MAX_VALUE;
visited[i]=false;
}
}
dijkastra_arr[k]=0;
min_heap.sort((a,b)=>{
return dijkastra_arr[b]-dijkastra_arr[a];
});
min_heap.pop();//For removing zeroth entry;
dijkastra(k);
let max_time=0;
if(min_heap.length)return -1;
for(let i=0;i<dijkastra_arr.length;i++){
max_time=Math.max(dijkastra_arr[i],max_time);
}
return max_time;
};