岛屿的最大面积

作者: _阿南_ | 来源:发表于2020-03-15 11:36 被阅读0次

题目:

给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。

找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为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,因为岛屿只能包含水平或垂直的四个方向的‘1’。

示例 2:

[[0,0,0,0,0,0,0,0]]
对于上面这个给定的矩阵, 返回 0。

注意: 给定的矩阵grid 的长度和宽度都不超过 50。

题目的理解:

循环二维数组,如果是岛屿再循环上下左右,需要注意是之前已经遍历过的需要排除。

python实现

class Solution:
    def __init__(self):
        self.island = set()

    def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
        max_island = 0
        island_set = set()
        max_i = len(grid)
        max_j = len(grid[0])

        def is_island(i: int, j: int):
            if i < 0 or j < 0 or i >= max_i or j >= max_j:
                return

            if 1 == grid[i][j]:
                if (i, j) in island_set:
                    return

                self.island.add((i, j))
                island_set.add((i, j))
                if (i - 1, j) not in self.island:
                    is_island(i - 1, j)
                if (i + 1, j) not in self.island:
                    is_island(i + 1, j)
                if (i, j - 1) not in self.island:
                    is_island(i, j - 1)
                if (i, j + 1) not in self.island:
                    is_island(i, j + 1)

        for index_i in range(len(grid)):
            for index_j in range(len(grid[0])):
                self.island.clear()
                is_island(index_i, index_j)

                max_island = max(max_island, len(self.island))

        return max_island

提交

ok

发现一直都没有用已经成熟的算法,都是靠本能来计算的。

// END 进入算法世界,熟悉常用算法

相关文章

网友评论

    本文标题:岛屿的最大面积

    本文链接:https://www.haomeiwen.com/subject/tzfcehtx.html