File tree Expand file tree Collapse file tree 2 files changed +86
-0
lines changed Expand file tree Collapse file tree 2 files changed +86
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[][] } times
3
+ * @param {number } n
4
+ * @param {number } k
5
+ * @return {number }
6
+ */
7
+ var networkDelayTime = function ( times , n , k ) {
8
+
9
+ let time_taken = 0 ;
10
+ const visited_set = new Set ( ) ;
11
+ const min_heap = new MinPriorityQueue ( ) ;
12
+ const node_edge_cost = new Map ( ) ;
13
+
14
+ for ( const [ node , edge , cost ] of times ) {
15
+ let edges = [ ] ;
16
+ if ( node_edge_cost . has ( node ) ) {
17
+ edges = node_edge_cost . get ( node ) ;
18
+ }
19
+ edges . push ( [ edge , cost ] ) ;
20
+ node_edge_cost . set ( node , edges ) ;
21
+ }
22
+
23
+ min_heap . enqueue ( [ k , 0 ] , 0 ) ;
24
+
25
+ while ( min_heap . size ( ) ) {
26
+
27
+ const [ node , cost ] = min_heap . dequeue ( ) . element ;
28
+
29
+ if ( visited_set . has ( node ) ) continue ;
30
+ visited_set . add ( node ) ;
31
+
32
+ time_taken = Math . max ( cost , time_taken ) ;
33
+
34
+ const node_edges = node_edge_cost . get ( node ) || [ ] ;
35
+
36
+ for ( const [ edge_node , edge_cost ] of node_edges ) {
37
+ if ( ! visited_set . has ( edge_node ) ) {
38
+ min_heap . enqueue ( [ edge_node , edge_cost + cost ] , edge_cost + cost ) ;
39
+ }
40
+ }
41
+ }
42
+
43
+ return visited_set . size === n ? time_taken : - 1 ;
44
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[][] } grid
3
+ * @return {number }
4
+ */
5
+ var swimInWater = function ( grid ) {
6
+
7
+ let time_passed = 0 ;
8
+ const visit_set = new Set ( ) ;
9
+ const min_heap = new MinPriorityQueue ( ) ;
10
+
11
+ const max_rows = grid . length - 1 ;
12
+ const max_cols = grid [ 0 ] . length - 1 ;
13
+ const directions = [
14
+ [ 1 , 0 ] ,
15
+ [ - 1 , 0 ] ,
16
+ [ 0 , 1 ] ,
17
+ [ 0 , - 1 ] ,
18
+ ] ;
19
+
20
+ min_heap . enqueue ( [ 0 , 0 ] , grid [ 0 ] [ 0 ] ) ;
21
+
22
+ while ( min_heap . size ( ) ) {
23
+
24
+ const node = min_heap . dequeue ( ) ;
25
+ const cost = node . priority ;
26
+ const [ x , y ] = node . element ;
27
+
28
+ visit_set . add ( grid [ x ] [ y ] ) ;
29
+ time_passed = Math . max ( cost , time_passed ) ;
30
+
31
+ if ( x === max_rows && y === max_cols ) return time_passed ;
32
+
33
+ for ( const direction of directions ) {
34
+ let [ new_x , new_y ] = direction ;
35
+ new_x += x ;
36
+ new_y += y ;
37
+
38
+ if ( new_x > max_rows || new_y > max_cols || new_x < 0 || new_y < 0 || visit_set . has ( grid [ new_x ] [ new_y ] ) ) continue ;
39
+ min_heap . enqueue ( [ new_x , new_y ] , grid [ new_x ] [ new_y ] ) ;
40
+ }
41
+ }
42
+ } ;
You can’t perform that action at this time.
0 commit comments