问题描述
思路
遍历每个元素,计算每个元素的所在岛屿的最大面积。运用dfs算法,没走到一个位置,判断该位置元s是否为1,如果是1,则把该位置置0,继续判断
代码
int dfs(int** grid, int gridSize, int* gridColSize, int x, int y)
{
if(grid[x][y] == 0) return 0;
grid[x][y] = 0;
int cnt = 1;
if(x-1 >= 0) cnt += dfs(grid, gridSize, gridColSize, x-1, y);
if(y-1 >= 0) cnt += dfs(grid, gridSize, gridColSize, x, y-1);
if(x+1 < gridSize) cnt += dfs(grid, gridSize, gridColSize, x+1, y);
if(y+1 < *gridColSize) cnt += dfs(grid, gridSize, gridColSize, x, y+1);
return cnt;
}
int maxAreaOfIsland(int** grid, int gridSize, int* gridColSize){
int res = 0;
for(int i = 0; i < gridSize; i++)
{
for(int j = 0; j < *gridColSize; j++)
{
int cnt = dfs(grid, gridSize, gridColSize, i, j);
res = res > cnt ? res : cnt;
}
}
return res;
}
时间复杂度和空间复杂度
- 时间复杂度O(m*n): 每个位置最多访问两遍
- 空间复杂度O(m*n): 迭代需要消耗栈空间