题目:
给定一个包含了一些 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
提交

发现一直都没有用已经成熟的算法,都是靠本能来计算的。
// END 进入算法世界,熟悉常用算法
网友评论