LCR 105.岛屿的最大面积

LCR 105.岛屿的最大面积

给定一个由 0 和 1 组成的非空二维数组 grid ,用来表示海洋岛屿地图。

一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。

找到给定的二维数组中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。

示例 1:

输入: grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]]
输出: 6
解释: 对于上面这个给定矩阵应返回 6。注意答案不应该是 11 ,因为岛屿只能包含水平或垂直的四个方向的 1 。

示例 2:

输入: grid = [[0,0,0,0,0,0,0,0]]
输出: 0

解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var maxAreaOfIsland = function (grid) {
let maxArea = 0;
let currArea = 0;

var dfs = function (i, j, grid) {
if (i < 0 || i >= grid.length) return;
if (j < 0 || j >= grid[0].length) return;
if (grid[i][j] === 0) return;

if (grid[i][j] === 1) {
currArea++;
grid[i][j] = 0;
}

dfs(i - 1, j, grid);
dfs(i + 1, j, grid);
dfs(i, j - 1, grid);
dfs(i, j + 1, grid);
};

for (let i = 0; i < grid.length; i++) {
for (let j = 0; j < grid[i].length; j++) {
if (grid[i][j] === 1) {
currArea = 0;
dfs(i, j, grid);
maxArea = Math.max(maxArea, currArea);
}
}
}
return maxArea;
};

DFS,遇到1就深搜计算面积,计算过程中将1“感染”为0防止重复计算,每计算完一个面积就更新一次最大面积。


LCR 105.岛屿的最大面积
https://lz5z.com/105.largest-island-area/
作者
tickli
发布于
2023年8月20日
许可协议