zoukankan      html  css  js  c++  java
  • 1080. 最大的岛

    1080. 最大的岛

    中文English

    给定一个由0和1组成的非空二维数组grid,一个岛由一组四联通(上下左右四方向)的1(表示陆地)组成。假定grid的四周都是水。

    返回最大的岛。(没有岛则返回0)

    样例

    样例 1:

    输入:
    [[0,0,1,0,0,0,0,1,0,0,0,0,0],
     [0,0,0,0,0,0,0,1,1,1,0,0,0],
     [0,1,1,0,1,0,0,0,0,0,0,0,0],
     [0,1,0,0,1,1,0,0,1,0,1,0,0],
     [0,1,0,0,1,1,0,0,1,1,1,0,0],
     [0,0,0,0,0,0,0,0,0,0,1,0,0],
     [0,0,0,0,0,0,0,1,1,1,0,0,0],
     [0,0,0,0,0,0,0,1,1,0,0,0,0]]
    输出:6。
    解释:注意不是11!因为是4方向联通。
    

    样例 2:

    输入:[[0,0,0,0,0,0,0,0]]
    输出:0
    

    注意事项

    grid中的每一维度长度都不超过50。

    输入测试数据 (每行一个参数)如何理解测试数据?
    class Solution:
        """
        @param grid: a 2D array
        @return: the maximum area of an island in the given 2D array
        """
        '''
        大致思路:
        1.初始化self.res = [],max_l = 0,给出一个方法,初始化around_list = [],可以求得四向的岛屿,如果为1而且[x,y]不在self.res里面的话
        添加到around_list里面
        2.给定一个append_land = [],count = 0,self.res是累计的过程,如果append_land = []的话,跳出循环,则需要进行判断max_l与count的大小,然后赋值
        直到所有循环结束。最后返回max_l即可。
        '''
        def __init__(self):
            self.res = []
    
        def maxAreaOfIsland(self,grid):
            max_l = 0
    
            #如果是在self.res里面的话,则直接跳过,里面初始化一个append_land = []
            for i in range(len(grid)):
                for j in range(len(grid[i])):
                    append_land = []
                    #如果当前循环的值不在self.res里面的话
                    if [i,j] not in self.res and grid[i][j] == 1:
                        self.res.append([i,j])
                        append_land.append([i,j])
                        count = 0 
                        while append_land != []:
                            count += 1
                            pop_column = append_land.pop(0)
                            l = self.getaroundland(grid,pop_column[0],pop_column[1])
                            append_land.extend(l)
                            self.res.extend(l)
    
                        ##进行判断
                        if max_l < count:
                            max_l = count
            return max_l
                  
        
        def getaroundland(self,grid,x,y):
            around_list = []
            #上方向
            if x-1 >= 0:
                if grid[x-1][y] == 1 and [x-1,y] not in self.res:
                    around_list.append([x-1,y])
            
            #下方向
            if x+1 < len(grid):
                if grid[x+1][y] == 1 and [x+1,y] not in self.res:
                    around_list.append([x+1,y])
            
            #左方向
            if y-1 >= 0:
                if grid[x][y-1] == 1 and [x,y-1] not in self.res:
                    around_list.append([x,y-1])
    
            #右方向
            if y+1 < len(grid[0]):
                if grid[x][y+1] == 1 and [x,y+1] not in self.res:
                    around_list.append([x,y+1])
    
            return around_list

    注:lintcode测试未通过,本地测试通过,待优化。(你的代码运行时间超过了限制,检查你的时间复杂度。TLE通常是由死循环造成的,思考一下你的时间复杂度是否是最优的。)

  • 相关阅读:
    简单验证码生成
    java编译器不匹配问题(java compiler level does not match the version of the installed java project facet)
    jQuery中$.fn
    ThreadLocal是什么?
    xmind 快捷键
    powerdesigner 连接oracle
    vs2019 System.FormatException:“Could not parse the JSON file.”
    svn常见操作
    sqlserve报错处理“数据类型 text 和 varchar 在 equal to 运算符中不兼容”
    数据库随机数据
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12649753.html
Copyright © 2011-2022 走看看