leetcode695 岛屿的最大面积

使用dfs,遍历grid当为1的时候,就通过dfs看这个岛屿的面积有多大,最后比较选出最大的一个。

class Solution:
    def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
        def dfs(x,y,visit,count):
            if grid[x][y]==1:
                visit[x][y]=1
                count+=1
            else:
                return count

            for item in [(0,1),(1,0),(-1,0),(0,-1)]:
                if 0<=x+item[0]<len(grid) and 0<=y+item[1]<len(grid[0]) and visit[x+item[0]][y+item[1]]!=1 and grid[x+item[0]][y+item[1]]!=0:

                    count=dfs(x+item[0],y+item[1],visit,count)
            return count

        maxvalue=0

        visit=[[0]*len(grid[0]) for _ in range(len(grid))]
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j]==1:
                   maxvalue=max(maxvalue, dfs(i,j,visit,0))
        return maxvalue

使用栈,可以类比使用队列。

class Solution:
    def maxAreaOfIsland(self, grid: List[List[int]]) -> int:


        stack=[]
        maxvalue=0

        for i in range(len(grid)):
            for j in range(len(grid[0])):

                if grid[i][j]==1:
                    count=1
                    grid[i][j]=0
                    stack.append((i,j))
                    while stack:
                        x,y=stack.pop()
                        for item in [(1,0),(0,1),(-1,0),(0,-1)]:
                            if 0<=x+item[0]<len(grid) and 0<=y+item[1]<len(grid[0]) and grid[x+item[0]][y+item[1]]==1:
                                grid[x+item[0]][y+item[1]]=0
                                stack.append((x+item[0],y+item[1]))
                                count+=1
                    maxvalue=max(maxvalue,count)

        return maxvalue

使用队列,只把栈的pop()改成pop(0)即可。

class Solution:
    def maxAreaOfIsland(self, grid: List[List[int]]) -> int:


        stack=[]
        maxvalue=0

        for i in range(len(grid)):
            for j in range(len(grid[0])):

                if grid[i][j]==1:
                    count=1
                    grid[i][j]=0
                    stack.append((i,j))
                    while stack:
                        x,y=stack.pop(0)
                        for item in [(1,0),(0,1),(-1,0),(0,-1)]:
                            if 0<=x+item[0]<len(grid) and 0<=y+item[1]<len(grid[0]) and grid[x+item[0]][y+item[1]]==1:
                                grid[x+item[0]][y+item[1]]=0
                                stack.append((x+item[0],y+item[1]))
                                count+=1
                    maxvalue=max(maxvalue,count)

        return maxvalue
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 11:30
找工作7个月,投了7000封,3段世界五百强实习,才有一个offer,牛油们肯定比我强吧
码农索隆:不对不对不对,实习经历这么厉害,简历也没少投,问题出在哪呢
点赞 评论 收藏
分享
程序员小白条:太晚了,看别人找到实习了才投的话,自己本身就没啥准备,计划太晚咯,只能吞苦果子
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 15:58
投个小米提前批试试水,先投一个岗位看看形势,不行就再沉淀一下投第二个岗位,莫辜负
Java抽象带篮子:我嘞个骚刚,已经开始研发6g了吗
投递小米集团等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务