题目描述
给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。
找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)
算法思路
很显然的类似腐烂橘子,同样可以采用广度优先搜索的方法。
直接贴算法好啦。
class Solution:
def maxAreaOfIsland(self, grid) -> int:
if not grid:return 0
x,y=len(grid[0]),len(grid)
dire=[]
direction=[[-1,0],[0,1],[1,0],[0,-1]]
for i in range(y):
for j in range(x):
if grid[i][j]==1:dire.append((i,j))
MAX=0
while True:
for i,j in dire:
if grid[i][j]==0:continue
grid[i][j]=0
tmp=1
tp=[(i,j)]
while tp:
i,j=tp.pop(0)
for d in direction:
i_new,j_new=i+d[0],j+d[1]
if 0<=i_new<y and 0<=j_new<x and grid[i_new][j_new]==1:
grid[i_new][j_new]=0
tmp+=1
tp.append([i_new,j_new])
MAX=max(MAX,tmp)
break
return MAX
执行用时 :152 ms, 在所有 Python3 提交中击败了77.65%的用户
内存消耗 :13.6 MB, 在所有 Python3 提交中击败了68.06%的用户
! 思路就是BFS,没什么值得说的,亮点也是如此:
direction=[[-1,0],[0,1],[1,0],[0,-1]]
for d in direction:
i_new,j_new=i+d[0],j+d[1]
if 0<=i_new<y and 0<=j_new<x and grid[i_new][j_new]==1: