描述
给定一个用 n*m 矩阵表示的群岛的地图,其中 1 表示岛屿, 0 表示海洋,每个岛屿的水平或竖直方向相邻的岛屿可以视为连在一起的岛屿,每一块岛屿视为面积为 1 ,请问面积最大的岛屿是多少。
例如:
当输入[[1,0],[0,1]]时,对应的地图为:
只有在水平或竖直方向相邻的岛屿可以连在一起,所以每个岛屿互相独立。最大面积是1
当输入[[1,1],[1,0]]时,对应的地图为:
三块岛屿可以连在一起,最大面积是3
数据范围:1 \le n,m \le 501≤n,m≤50
示例1
输入:
[[1,0],[0,1]]复制
返回值:
1复制
说明:
如题面解释
示例2
输入:
[[1,1],[1,0]]复制
返回值:
3复制
说明:
如题面解释
解题思路:
本题和计算岛屿个数类似,在找到岛屿后将岛屿淹没,淹没的过程中记录岛屿面积,通过max函数并取得岛屿面积最大值。
class Solution {
public:
int func(vector<vector<int> >& grid, int x, int y) {
int n = grid.size();
int m = grid[0].size();
if (x < 0 || x >= n || y < 0 || y >= m || grid[x][y] == 0) {
return 0;
}
grid[x][y] = 0;
int res = 1;
res += func(grid, x, y+1);
res += func(grid, x, y-1);
res += func(grid, x-1, y);
res += func(grid, x+1, y);
return res;
}
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param grid int整型vector<vector<>>
* @return int整型
*/
int maxAreaIsland(vector<vector<int> >& grid) {
// write code here
int n = grid.size();
int m = grid[0].size();
int res = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (grid[i][j] == 1) {
res = max(res, func(grid, i, j));
}
}
}
return res;
}
};

京公网安备 11010502036488号