岛屿的最大面积
题目描述
- 题目地址:https://leetcode.cn/problems/max-area-of-island/
- 题目要求
给你一个大小为 m x n 的二进制矩阵 grid 。
岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
岛屿的面积是岛上值为 1 的单元格的数目。
计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。
解题思路
- 从某一块陆地出发,向四个方向递归DFS
- 每次递归前要对下标进行判断,以区域的边界作为递归边界
- 为保证每块陆地只访问一次,将已经访问过的陆地置0
- 递归地返回整块岛屿的面积
- fill()方法用一个固定值填充一个数组中从起始索引到终止索引内的全部元素
解题代码
var maxAreaOfIsland = function(grid) {
const gLen = grid.length
const hLen = grid[0].length
if (!grid.length) {
return 0
}
// 存储当前所选元素在平面内上下左右四个方向元素
const d = [[-1, 0], [0, 1], [1, 0], [0, -1]]
// 维护递归过程中,平面中元素的使用状态,每个只能使用一次
const used = []
// 保存岛屿最大面积
let max = 0
let count = 0
// 判断所选元素是否在二维平面内
const inArea = function (x, y) {
return x >=0 && x < grid.length && y >=0 && y < grid[0].length
}
// 递归函数,深度优先遍历,从grid[i][j]开始移动,将所有链接的陆地标记为访问过
const dfs = function (grid, i, j) {
used[i][j] = true
count ++
for (let k = 0; k < 4; k++) {
const newX = i + d[k][0]
const newY = j + d[k][1]
if (inArea(newX, newY) && !used[newX][newY] && grid[newX][newY] == 1) {
dfs(grid, newX, newY)
}
}
}
for (let i = 0; i < gLen; i++) {
used.push(new Array(hLen).fill(false))
}
for (let i = 0; i < gLen; i++) {
for (let j = 0; j < hLen; j++) {
if (!used[i][j] && grid[i][j] == 1) {
dfs(grid, i, j)
max = Math.max(max, count)
count = 0
}
}
}
return max
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~