695. 岛屿的最大面积
https://leetcode-cn.com/problems/max-area-of-island/
解法一:dfs
类似于200.岛屿的个数。不同之处在于200题中不求面积,本题因为要求面积,需要考虑在递归函数中返回本层所得面积。
class Solution:
def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
m, n = len(grid), len(grid[0])
maxArea = 0
#遍历矩阵
for i in range(m):
for j in range(n):
#每次dfs,更新最大面积
maxArea = max(maxArea, self.dfs(grid, i, j))
return maxArea
def dfs(self, grid, i, j):
#递归终点(越界,或为0)
if i < 0 or i >= len(grid) or j < 0 or j >= len(grid[0]) or grid[i][j] == 0:
return 0
#若为1
grid[i][j] = 0 #置0
#递归访问上下左右,并累加面积
area = 1 + self.dfs(grid, i-1, j) + self.dfs(grid, i+1, j) + self.dfs(grid, i, j-1) + self.dfs(grid, i, j+1)
return area二、并查集
与200. 岛屿的个数不同,那题是求连通分量数,这题是求最大连通分量的size。
因为事先不知道1在哪些节点,因此没法用size数组确切的表示出所有1的连通分量大小,只能先预设size数组长度为m*n,初始所有节点连通分量大小都为1,然后求出所有连通分量的大小。
最后找最大连通分量,要避开0,因此遍历过程中不能使用200题中的优化技巧:访问1之后置0,毕竟后处理还要用到
最后更新于