Skip to content

Commit a33e9e7

Browse files
authored
Create 1970-last-day-where-you-can-still-cross.js
1 parent d963fbb commit a33e9e7

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed
+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/**
2+
* @param {number} row
3+
* @param {number} col
4+
* @param {number[][]} cells
5+
* @return {number}
6+
*/
7+
const latestDayToCross = function (row, col, cells) {
8+
let l = 0,
9+
n = cells.length,
10+
r = n - 1,
11+
res = 0
12+
while (l < r) {
13+
const mid = ~~((l + r) / 2)
14+
if (canWalk(mid)) {
15+
l = mid + 1
16+
res = mid
17+
} else {
18+
r = mid
19+
}
20+
}
21+
22+
return res + 1
23+
24+
function canWalk(mid) {
25+
const grid = Array.from({ length: row }, () => Array(col).fill(0))
26+
const dirs = [
27+
[1, 0],
28+
[-1, 0],
29+
[0, 1],
30+
[0, -1],
31+
]
32+
for (let i = 0; i <= mid; i++) {
33+
const [r, c] = cells[i]
34+
grid[r - 1][c - 1] = 1
35+
}
36+
37+
let q = []
38+
39+
for (let i = 0; i < col; i++) {
40+
if (grid[0][i] === 0) {
41+
q.push([0, i])
42+
grid[0][i] = 1
43+
}
44+
}
45+
46+
while (q.length) {
47+
const size = q.length,
48+
tmp = []
49+
for (let i = 0; i < size; i++) {
50+
const [r, c] = q[i]
51+
if (r === row - 1) return true
52+
for (let [dr, dc] of dirs) {
53+
const nr = r + dr,
54+
nc = c + dc
55+
if (nr < 0 || nr >= row || nc < 0 || nc >= col || grid[nr][nc] === 1)
56+
continue
57+
tmp.push([nr, nc])
58+
grid[nr][nc] = 1
59+
}
60+
}
61+
q = tmp
62+
}
63+
64+
return false
65+
}
66+
}

0 commit comments

Comments
 (0)