417. Pacific Atlantic Water Flow

Pacific Atlantic Water Flow (LeetCode 417) is a Medium Data Structures and Algorithms interview problem you can solve, run and submit on Thita.ai. It belongs to the Graph Traversal Patterns (DFS & BFS) pattern, in the Graph DFS - Connected Components / Island Counting subpattern.

How to solve Pacific Atlantic Water Flow

Pacific Atlantic Water Flow is a DFS Connected Components problem, part of Graph Traversal Patterns (DFS & BFS). Use DFS to find connected components and count islands in grids. Flood fill and province counting problems.

Work towards the solution in these steps:

  1. Consider how to model the problem as a graph traversal where each cell is a node connected to its neighbors if water can flow between them.
  2. Think about starting your traversal not from each cell individually, but from the ocean borders and moving inward to find which cells can reach the oceans.
  3. Use two separate traversals (DFS or BFS): one starting from all cells adjacent to the Pacific Ocean and one from the Atlantic Ocean, marking reachable cells for each.

The reference solution runs in O(m * n) time and O(m * n) space.

The Pacific Atlantic Water Flow solution and editorial walks through the full approach with reference code.

Problem statement

There is an m x n rectangular island that borders both the Pacific Ocean and Atlantic Ocean. The Pacific Ocean touches the island's left and top edges, and the Atlantic Ocean touches the island's right and bottom edges.

The island is partitioned into a grid of square cells. You are given an m x n integer matrix heights where heights[r][c] represents the height above sea level of the cell at coordinate (r, c).

The island receives a lot of rain, and the rain water can flow to neighboring cells directly north, south, east, and west if the neighboring cell's height is less than or equal to the current cell's height. Water can flow from any cell adjacent to an ocean into the ocean.

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:

Input: heights = [[1,2,2,3,5],[3,2,3,4,4],[2,4,5,3,1],[6,7,1,4,5],[5,1,1,2,4]] 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] -> Atlantic 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] -> Atlantic 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] -> [4,0] -> Atlantic Ocean [3,1]: [3,1] -> [3,0] -> Pacific Ocean [3,1] -> [4,1] -> Atlantic 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.

Example 2:

Input: heights = [[1]] Output: [[0,0]] Explanation: The water can flow from the only cell to the Pacific and Atlantic oceans.

Constraints:

- m == heights.length

- n == heights[r].length

- 1 <= m, n <= 200

- 0 <= heights[r][c] <= 105

Topics and companies

Topics: Array, Depth-First Search, Breadth-First Search, Matrix.

Reported in interviews at Amazon, Bloomberg, ByteDance, Facebook, Google, Microsoft, Oracle.

How to practise Pacific Atlantic Water Flow on Thita.ai

Starter code is provided in C, C#, C++, Go, Java, JavaScript and Python. Your solution runs against 5 test cases for this problem, with the AI coach available for a hint when you are stuck rather than a finished answer. The reference solution runs in O(m * n) time and O(m * n) space.

Open Pacific Atlantic Water Flow in the code editor, or read the Pacific Atlantic Water Flow editorial for a worked solution with its approach and complexity analysis.

Where Pacific Atlantic Water Flow sits in the DSA pattern sheet

Problems related to Pacific Atlantic Water Flow

Other problems that use the same Graph DFS - Connected Components / Island Counting and Graph Traversal Patterns (DFS & BFS) techniques:

Pacific Atlantic Water Flow FAQ

What is the LeetCode number of Pacific Atlantic Water Flow?

Pacific Atlantic Water Flow is LeetCode problem 417, rated Medium.

What pattern is used to solve Pacific Atlantic Water Flow?

Pacific Atlantic Water Flow is a DFS Connected Components problem. It belongs to the Graph Traversal Patterns (DFS & BFS) pattern, in the Graph DFS - Connected Components / Island Counting subpattern.

What is the time complexity of Pacific Atlantic Water Flow?

The reference solution runs in O(m * n) time and O(m * n) space.

Which companies ask Pacific Atlantic Water Flow?

Pacific Atlantic Water Flow has been reported in interviews at Amazon, Bloomberg, ByteDance, Facebook, Google, Microsoft, Oracle.

Preparing this workspace.