From ae1d1ceede6b65cfb12d3c389dc82033087183b7 Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Mon, 21 Sep 2026 18:05:35 -0400 Subject: [PATCH] feat(work): implement Pacific Atlantic Water Flow solution --- .../Array/417.pacific-atlantic-water-flow.py | 62 ++++++++++++++----- 1 file changed, 48 insertions(+), 14 deletions(-) diff --git a/work/1/Medium/Array/417.pacific-atlantic-water-flow.py b/work/1/Medium/Array/417.pacific-atlantic-water-flow.py index 615f377..4e6cb49 100644 --- a/work/1/Medium/Array/417.pacific-atlantic-water-flow.py +++ b/work/1/Medium/Array/417.pacific-atlantic-water-flow.py @@ -24,7 +24,7 @@ Return a 2D list of grid coordinates result where result[i] = [ri, ci] denotes that rain water can flow from cell (ri, ci) to both the Pacific and Atlantic oceans. - + Example 1: @@ -33,19 +33,19 @@ Input: heights = Output: [[0,4],[1,3],[1,4],[2,2],[3,0],[3,1],[4,0]] Explanation: The following cells can flow to the Pacific and Atlantic oceans, as shown below: -[0,4]: [0,4] -> Pacific Ocean +[0,4]: [0,4] -> Pacific Ocean [0,4] -> Atlantic Ocean -[1,3]: [1,3] -> [0,3] -> Pacific Ocean +[1,3]: [1,3] -> [0,3] -> Pacific Ocean [1,3] -> [1,4] -> Atlantic Ocean -[1,4]: [1,4] -> [1,3] -> [0,3] -> Pacific Ocean +[1,4]: [1,4] -> [1,3] -> [0,3] -> Pacific Ocean [1,4] -> Atlantic Ocean -[2,2]: [2,2] -> [1,2] -> [0,2] -> Pacific Ocean +[2,2]: [2,2] -> [1,2] -> [0,2] -> Pacific Ocean [2,2] -> [2,3] -> [2,4] -> Atlantic Ocean -[3,0]: [3,0] -> Pacific Ocean +[3,0]: [3,0] -> Pacific Ocean [3,0] -> [4,0] -> Atlantic Ocean -[3,1]: [3,1] -> [3,0] -> Pacific Ocean +[3,1]: [3,1] -> [3,0] -> Pacific Ocean [3,1] -> [4,1] -> Atlantic Ocean -[4,0]: [4,0] -> Pacific Ocean +[4,0]: [4,0] -> Pacific Ocean [4,0] -> Atlantic Ocean Note that there are other possible paths for these cells to flow to the Pacific and Atlantic oceans. @@ -57,19 +57,53 @@ Output: [[0,0]] Explanation: The water can flow from the only cell to the Pacific and Atlantic oceans. - + Constraints: - • m == heights.length + • m == heights.length - • n == heights[r].length + • n == heights[r].length - • 1 <= m, n <= 200 + • 1 <= m, n <= 200 - • 0 <= heights[r][c] <= 10^5 + • 0 <= heights[r][c] <= 10^5 """ + class Solution: def pacificAtlantic(self, heights: list[list[int]]) -> list[list[int]]: - + rows, cols = len(heights), len(heights[0]) + pac, atl = set(), set() + + def dfs(r, c, seen, prevHeight): + if ( + (r, c) in seen + or r < 0 + or c < 0 + or r == rows + or c == cols + or heights[r][c] < prevHeight + ): + return + seen.add((r, c)) + dfs(r + 1, c, seen, heights[r][c]) + dfs(r - 1, c, seen, heights[r][c]) + dfs(r, c + 1, seen, heights[r][c]) + dfs(r, c - 1, seen, heights[r][c]) + + for c in range(cols): + dfs(0, c, pac, heights[0][c]) + dfs(rows - 1, c, atl, heights[rows - 1][c]) + + for r in range(rows): + dfs(r, 0, pac, heights[r][0]) + dfs(r, cols - 1, atl, heights[r][cols - 1]) + + res = [] + for r in range(rows): + for c in range(cols): + if (r, c) in pac and (r, c) in atl: + res.append([r, c]) + + return res