Last Day Where You Can Still Cross LeetCode solution in JavaScript

1
/**
2
* @param {number} row
3
* @param {number} col
4
* @param {number[][]} cells
5
* @return {number}
6
*/
7
var latestDayToCross = function (row, col, cells) {
8
//Create empty ground
9
const emptyArr = () =>
10
Array(row)
11
.fill(0)
12
.map((el) => Array(col).fill(0));
13
let ground;
14

15
// Check if path exists
16
function isExistPath() {
17
//Depth First Search
18
function dfs(i, j) {
19
if (i === row || j === col || j < 0 || i < 0) return false;
20
if (ground[i][j] === 1) return false;
21
if (i === row - 1) return true;
22
ground[i][j] = 1;
23
return dfs(i + 1, j) || dfs(i, j - 1) || dfs(i, j + 1) || dfs(i - 1, j);
24
}
25
for (let j = 0; j < col; j++) if (dfs(0, j)) return true;
26
return false;
27
}
28

29
//fill the ground and check paths
30
function isGoodGround(end) {
31
ground = emptyArr();
32
for (let i = 0; i <= end; i++) ground[cells[i][0] - 1][cells[i][1] - 1] = 1;
33
return isExistPath();
34
}
35

36
//binary search by day
37
let l = -1,
38
r = cells.length;
39
while (r - l > 1) {
40
const mid = (l + r) >>> 1;
41
if (isGoodGround(mid)) l = mid;
42
else r = mid;
43
}
44
return l + 1;
45
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0