200. Number of Islands
https://leetcode.com/problems/number-of-islands/
solution
flood fill
dfs
class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
m = len(grid)
n = len(grid[0])
visited = [[False] * n for _ in range(m)]
dirs = [[0, 1], [1, 0], [0, -1], [-1, 0]]
res: int = 0
for i in range(m):
for j in range(n):
if grid[i][j] == '1' and not visited[i][j]:
res += 1
self.dfs(i, j, grid, dirs, visited)
return res
def dfs(self, i, j, grid, dirs, visited):
if grid[i][j] == '0' or visited[i][j]:
return
visited[i][j] = True
for dir in dirs:
new_i = i + dir[0]
new_j = j + dir[1]
if new_i < 0 or new_i >= len(grid) or new_j < 0 or new_j >= len(grid[0]):
continue
self.dfs(new_i, new_j, grid, dirs, visited)时间复杂度:O(mn) 空间复杂度:O(mn)
bfs
时间复杂度:O(mn) 空间复杂度:O()
union find
follow up-岛屿类
大数据量: grid特别大,放不进内存,你怎么做?
union-find有巨大优势,可以一行一行的处理,这样每次读入内存两行数据就行
遍历图1为水、图2为岛的图2所有岛屿,标记为水;然后统计图2的岛屿
时间复杂度:O() 空间复杂度:O()
时间复杂度:O() 空间复杂度:O()
时间复杂度:O() 空间复杂度:O()
1254. Number of Closed Islands
时间复杂度:O() 空间复杂度:O()
有case不通过的错误做法, 还没去找原因
时间复杂度:O() 空间复杂度:O()
Last updated