LC 695图论中等第 89 / 95 题

岛屿的最大面积

Max Area of Island

DFS连通分量
本机进度仅保存在当前浏览器

题目描述

给你一个大小为 m x n 的二进制矩阵 grid,岛屿由一些相邻的 1 组成(只考虑上下左右方向),求岛屿的最大面积(即格子数最多的岛屿的格子数)。

示例:grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0], ...],最大岛屿面积为 6。

解题思路

  1. 与"岛屿数量"同一框架:DFS 求连通分量,只是这次要返回分量大小。
  2. 递归函数返回以当前格为起点的面积:自身 1 + 四个方向合法陆地面积之和;访问过的格子标记为 0 防止重复计数。
  3. 全局扫描取最大值。

参考实现

查看参考实现Python · 建议先自行作答
def maxAreaOfIsland(grid):
    m, n = len(grid), len(grid[0])

    def dfs(i, j):
        if not (0 <= i < m and 0 <= j < n) or grid[i][j] != 1:
            return 0
        grid[i][j] = 0
        # 自身 + 四方向子面积
        return 1 + dfs(i + 1, j) + dfs(i - 1, j) + dfs(i, j + 1) + dfs(i, j - 1)

    return max((dfs(i, j) for i in range(m) for j in range(n)), default=0)

复杂度与归属

时间复杂度O(m · n)
空间复杂度O(m · n)
所属分类图论
题源LeetCode 695

关联教程

返回题图鉴