Skip to content

Commit 48d7ebe

Browse files
authored
Create 778-swim-in-rising-water.js
1 parent f327e7e commit 48d7ebe

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

778-swim-in-rising-water.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* @param {number[][]} grid
3+
* @return {number}
4+
*/
5+
const swimInWater = function(grid) {
6+
let n = grid.length;
7+
let low = grid[0][0],
8+
hi = n * n - 1;
9+
while (low < hi) {
10+
let mid = low + Math.floor((hi - low) / 2);
11+
if (valid(grid, mid)) hi = mid;
12+
else low = mid + 1;
13+
}
14+
return low;
15+
};
16+
17+
function valid(grid, waterHeight) {
18+
let n = grid.length;
19+
const visited = Array.from(new Array(n), el => new Array(n).fill(0));
20+
const dir = [-1, 0, 1, 0, -1];
21+
return dfs(grid, visited, dir, waterHeight, 0, 0, n);
22+
}
23+
function dfs(grid, visited, dir, waterHeight, row, col, n) {
24+
visited[row][col] = 1;
25+
for (let i = 0; i < 4; ++i) {
26+
let r = row + dir[i],
27+
c = col + dir[i + 1];
28+
if (
29+
r >= 0 &&
30+
r < n &&
31+
c >= 0 &&
32+
c < n &&
33+
visited[r][c] == 0 &&
34+
grid[r][c] <= waterHeight
35+
) {
36+
if (r == n - 1 && c == n - 1) return true;
37+
if (dfs(grid, visited, dir, waterHeight, r, c, n)) return true;
38+
}
39+
}
40+
return false;
41+
}

0 commit comments

Comments
 (0)