417. Pacific Atlantic Water Flow
- two sets, dfs towards inner graph, then intersection
class Solution:
def pacificAtlantic(self, heights: List[List[int]]) -> List[List[int]]:
ROW, COL = len(heights), len(heights[0])
pac, atl = set(), set()
def dfs(row, col, visited, prevH):
if not (0 <= row < ROW and 0 <= col < COL) or (row, col) in visited or heights[row][col] < prevH:
return
visited.add((row, col))
dfs(row - 1, col, visited, heights[row][col])
dfs(row + 1, col, visited, heights[row][col])
dfs(row, col + 1, visited, heights[row][col])
dfs(row, col - 1, visited, heights[row][col])
for c in range(COL):
dfs(0, c, pac, heights[0][c])
dfs(ROW - 1, c, atl, heights[ROW - 1][c])
for r in range(ROW):
dfs(r, 0, pac, heights[r][0])
dfs(r, COL - 1, atl, heights[r][COL -1])
return list(set.intersection(pac, atl))