Skip to content

File tree

3 files changed

+75
-0
lines changed

3 files changed

+75
-0
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ Step 2. Add the dependency
4949

5050
<summary>展开查看</summary>
5151

52+
https://leetcode.cn/problems/time-needed-to-inform-all-employees
53+
54+
https://leetcode.cn/problems/rotting-oranges
55+
5256
https://leetcode.cn/problems/exam-room/
5357

5458
https://leetcode.cn/problems/as-far-from-land-as-possible/

rotting-oranges/index.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
function orangesRotting(grid: number[][]): number {
2+
let minutes = 0;
3+
let fresh = 0;
4+
let queue: [number, number][] = [];
5+
const w = grid.length,
6+
h = grid[0].length;
7+
for (let i = 0; i < w; i++) {
8+
for (let j = 0; j < h; j++) {
9+
if (grid[i][j] === 1) fresh++;
10+
if (grid[i][j] === 2) queue.push([i, j]);
11+
}
12+
}
13+
const area = [
14+
[0, 1],
15+
[0, -1],
16+
[-1, 0],
17+
[1, 0],
18+
];
19+
while (queue.length !== 0 && fresh) {
20+
const next: [number, number][] = [];
21+
while (queue.length !== 0) {
22+
// @ts-ignore
23+
const current = queue.pop() as [number, number];
24+
for (const [dx, dy] of area) {
25+
// @ts-ignore
26+
const x = dx + current[0],
27+
y = dy + current[1];
28+
if (x >= 0 && x < w && y >= 0 && y < h) {
29+
if (grid[x][y] === 1) {
30+
grid[x][y] = 2;
31+
next.push([x, y]);
32+
fresh--;
33+
}
34+
}
35+
}
36+
}
37+
minutes++;
38+
queue = next;
39+
}
40+
return fresh === 0 ? minutes : -1;
41+
}
42+
export default orangesRotting;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
function numOfMinutes(
2+
n: number,
3+
headID: number,
4+
manager: number[],
5+
informTime: number[],
6+
): number {
7+
const max: number[] = [];
8+
const pretime: number[] = new Array(n).fill(-1);
9+
// 顶层
10+
pretime[headID] = 0;
11+
12+
function dfs(currentNode: number): number {
13+
if (pretime[currentNode] >= 0) return pretime[currentNode];
14+
15+
pretime[currentNode] = informTime[manager[currentNode]] +
16+
dfs(manager[currentNode]);
17+
return pretime[currentNode];
18+
}
19+
20+
// 从叶子节点向上搜索
21+
for (let i = 0; i < n; i++) {
22+
if (informTime[i] !== 0) continue;
23+
24+
max.push(dfs(i));
25+
}
26+
27+
return Math.max(...max);
28+
}
29+
export default numOfMinutes;

0 commit comments

Comments
 (0)