leetcode695.岛屿最大面积

156 阅读1分钟

问题描述

思路

遍历每个元素,计算每个元素的所在岛屿的最大面积。运用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): 迭代需要消耗栈空间