全屋定制十大名牌排行最新百度自然排名优化
1、题目描述:
给你一个大小为 m x n
的二进制矩阵 grid
。
岛屿 是由一些相邻的 1
(代表土地) 构成的组合,这里的「相邻」要求两个 1
必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid
的四个边缘都被 0
(代表水)包围着。
岛屿的面积是岛上值为 1
的单元格的数目。
计算并返回 grid
中最大的岛屿面积。如果没有岛屿,则返回面积为 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 解释:答案不应该是 11,因为岛屿只能包含水平或垂直这四个方向上的 1 。
示例 2:
输入:grid = [[0,0,0,0,0,0,0,0]] 输出:0
提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 50
grid[i][j]
为0
或1
2、代码:
#include <vector>using namespace std;class Solution
{
public:/*** @brief 计算二维网格中最大岛屿面积* @param grid 二维网格数组,1表示陆地,0表示水域* @return 最大岛屿面积(如果没有岛屿返回0)* * 算法思路:* 1. 遍历网格中的每个单元格* 2. 当发现陆地(值为1)时,启动深度优先搜索* 3. 通过DFS计算当前岛屿面积并更新最大值*/int maxAreaOfIsland(vector<vector<int>>& grid){// 处理空网格的特殊情况if (grid.empty()) {return 0;}int max_area = 0; // 记录最大面积// 遍历所有网格单元for (int i = 0; i < grid.size(); i++) {for (int j = 0; j < grid[0].size(); j++) {// 只在发现未访问的陆地时启动DFSif (grid[i][j] == 1) {// 计算当前岛屿面积并更新最大值max_area = max(max_area, dfs(grid, i, j));}}}return max_area;}private:/*** @brief 深度优先搜索计算岛屿面积* @param grid 二维网格数组(会被修改标记已访问区域)* @param i 当前行坐标* @param j 当前列坐标* @return 当前岛屿的面积* * 算法细节:* 1. 先进行边界检查,防止数组越界* 2. 检查当前是否为未访问的陆地(值仍为1)* 3. 标记当前单元格为已访问(置为0)* 4. 递归探索四个相邻方向并累加面积*/int dfs(vector<vector<int>>& grid, int i, int j){// 终止条件:坐标越界或遇到水域/已访问区域if (i < 0 || j < 0 || i >= grid.size() || j >= grid[0].size() ||grid[i][j] == 0) {return 0;}// 标记当前单元格为已访问(沉岛法)grid[i][j] = 0;// 递归探索四个方向并累加面积return 1 + dfs(grid, i - 1, j) // 向上探索+ dfs(grid, i + 1, j) // 向下探索+ dfs(grid, i, j - 1) // 向左探索+ dfs(grid, i, j + 1); // 向右探索}
};
3、解题思路:
- 遍历网格:逐个访问每个单元格,当遇到陆地(值为1)时,启动DFS计算该岛屿的面积。
- DFS计算面积:递归访问当前单元格的上下左右四个方向,将访问过的陆地标记为0,同时统计所有连接的陆地单元格数量。
- 更新最大值:每次计算完一个岛屿的面积后,更新最大面积值。
-
主函数
maxAreaOfIsland
:- 遍历整个网格,对每个单元格进行检查。
- 当发现陆地时,调用DFS函数计算该岛屿的面积,并更新最大面积。
-
辅助函数
dfs
:- 检查当前单元格是否越界或是否为水(0),若是则返回0。
- 将当前单元格标记为已访问(置为0),防止重复计算。
- 递归访问当前单元格的上下左右四个方向,统计所有连接的陆地单元格数量之和,并返回该面积。