【ChatCode 003】岛屿的最大面积

博客介绍了 LeetCode 695 题使用深度优先搜索(DFS)求解岛屿面积的方法。主要思路是遍历矩阵,对岛屿点用 dfs 函数求其上下左右岛屿面积并标记已访问,累加结果。该解法时间复杂度为 O(m*n),空间复杂度为 O(1)。

LeetCode 695

https://leetcode.cn/problems/max-area-of-island/


DFS解法

def maxAreaOfIsland(grid: List[List[int]]) -> int:
    """
    求解岛屿的最大面积
    :param grid: 给定矩阵, 1表示岛屿,0表示水域
    :return: 最大面积
    """
    # 初始化最大面积
    max_area = 0
    for i in range(len(grid)):
        for j in range(len(grid[0])):
            # 当前点是岛屿
            if grid[i][j] == 1:
                # 求解当前岛屿面积
                area = dfs(grid, i, j)
                # 更新最大面积
                max_area = max(max_area, area)
    return max_area

def dfs(grid: List[List[int]], i: int, j: int) -> int:
    """
    使用深度优先搜索求解岛屿面积
    :param grid: 给定矩阵
    :param i: 当前点横坐标
    :param j: 当前点纵坐标
    :return: 岛屿面积
    """
    # 当前点越界或不是岛屿,返回0
    if i < 0 or i >= len(grid) or j < 0 or j >= len(grid[0]) or grid[i][j] != 1:
        return 0
    # 标记当前点已经访问过
    grid[i][j] = 0
    # 求解上下左右四个方向的岛屿面积
    area = 1 + dfs(grid, i + 1, j) + dfs(grid, i - 1, j) + dfs(grid, i, j + 1) + dfs(grid, i, j - 1)
    return area

上述代码使用了深度优先搜索来求解岛屿面积,主要思路是遍历整个矩阵,对于每个是岛屿的点,使用dfs函数求解其上下左右四个方向的岛屿面积,并将遍历过的点标记为已经访问过。

在每次调用dfs函数时,会计算上下左右四个方向的岛屿面积,并将结果累加到当前点的岛屿面积上。在遍历完整个矩阵后,得到的最大面积即为答案。

由于dfs函数需要遍历整个矩阵,时间复杂度为 O(m*n),m为矩阵行数,n为矩阵列数。空间复杂度为O(1),因为并不需要额外空间来存储搜索过程中产生的状态。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值