岛屿的最大面积-LeetCode
695. 岛屿的最大面积
🎯 问题描述
给定一个包含 0 和 1 的二维网格 grid,其中 1 代表陆地,0 代表水域。岛屿是由水平方向或垂直方向上相邻的陆地连接而成的。请计算并返回最大的岛屿面积。如果不存在岛屿,则返回面积 0。
测试用例格式:
- 输入:二维列表
grid,每个元素为0或1 - 输出:整数,表示最大岛屿面积
💻 解题思路
核心算法:深度优先搜索(DFS)
算法原理
- 遍历网格:使用双重循环遍历网格中的每个格子
- 发现陆地:当遇到值为
1的格子时,启动 DFS 计算该岛屿的面积 - 淹没岛屿:在 DFS 过程中将访问过的陆地标记为
0,防止重复计算 - 面积累加:通过递归返回值累加每个连通陆地的面积
关键技术点
- 递归返回值:利用返回值传递子问题的解,避免传值问题
- 边界处理:在递归开始时检查边界条件
- 状态标记:直接修改原数组标记已访问位置,节省空间
💻 解题思路
思路1: DFS
思路1:代码实现
1 | class Solution: |
思路1:📊 性能分析
提交结果
- 运行时间:19ms击败57.37%
- 内存消耗:20.32MB击败42.89%
复杂度验证
| 指标 | 复杂度 | 说明 |
|---|---|---|
| 时间复杂度 | O(M × N) | M 和 N 分别是网格的行数和列数。每个格子最多被访问一次 |
| 空间复杂度 | O(M × N) | 递归调用栈的深度,在最坏情况下(整个网格是一个大岛屿)达到 M×N |
思考
⚠️ 常见错误分析
- 错误1:返回值类型错误
1 | # 错误写法 |
- 错误2:参数传递问题
1 | # 错误写法 |
本题是经典的图遍历问题,通过深度优先搜索(DFS)或广度优先搜索(BFS)均可解决。关键在于:
- 正确处理边界条件
- 使用返回值累加面积
- 及时标记已访问节点
- 比较并更新最大面积
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 笺札!






