Skip to content

Commit 03bd29c

Browse files
authored
Merge pull request neetcode-gh#633 from Samuel-Hinchliffe/main
(JS) Create 743. Network Delay Time & 778. Swim in Rising Water
2 parents 91f3a78 + 10a3e48 commit 03bd29c

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed

javascript/743-Network-Delay-Time.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
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+
};
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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+
};

0 commit comments

Comments
 (0)