【力扣日记】659 岛屿的最大面积 | BFS

题目描述

给定一个包含了一些 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:
发布了210 篇原创文章 · 获赞 20 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Heart_for_Ling/article/details/104877155