Leetcode # 200. Number of Islands
- 2022.12.09
- Disjoint Set Union LeetCode
https://leetcode.com/problems/number-of-islands/
Solution: Disjoint Set Union (DSU)
Time Complexity: O(len(grid) * len(grid[0]))
Space Complexity: O(len(grid) * len(grid[0]))
(The input and output generally do not count towards the space complexity.)
class Solution: def numIslands(self, grid: List[List[str]]) -> int: l = 2 map = [[0 if element =="0" else 1 for element in row] for row in grid ] for i in range(len(map)): for j in range(len(map[i])): if map[i][j] == 1: if i > 0 and map[i - 1][j] != 0: map[i][j] = map[i - 1][j] elif j > 0 and map[i][j - 1] != 0: map[i][j] = map[i][j - 1] else: map[i][j] = l l += 1 parent = [i for i in range(l)] def find(x): return x if parent[x] == x else find(parent[x]) def union(x, y): x_root = find(x) y_root = find(y) parent[x_root] = y_root for i in range(len(map)): for j in range(len(map[i])): if map[i][j] > 1: if i > 0 and map[i - 1][j] > 1 and map[i - 1][j] != map[i][j]: union(map[i - 1][j], map[i][j]) elif j > 0 and map[i][j - 1] > 1 and map[i][j - 1] != map[i][j]: union(map[i][j - 1], map[i][j]) ans = set() for p in parent[2:]: ans.add(find(p)) return len(ans)
Last Updated on 2023/08/16 by A1go