947. Most Stones Removed with Same Row or Column

On a 2D plane, we place stones at some integer coordinate points. Each coordinate point may have at most one stone.

Now, a _move _consists of removing a stone that shares a column or row with another stone on the grid.

What is the largest possible number of moves we can make?

Example 1:

Input: 
stones = [[0,0],[0,1],[1,0],[1,2],[2,1],[2,2]]
Output: 5

Example 2:

Input: 
stones = [[0,0],[0,2],[1,1],[2,0],[2,2]]
Output: 3

Example 3:

Input: 
stones = [[0,0]]
Output: 0

Note:

  1. 1 <= stones.length <= 1000

  2. 0 <= stones[i][j] < 10000

Thoughts:

  1. Union Find: Similar to number of islands, where a "connected" graph is a island. Unify the row and col index (Original Post)

    1. Optimization: Path Compression, Union by rank (see 305. Number of Islands II)

  2. DFS: number of islands -> island: collection of points connected by row or column (Original Post)

Code: T: O(n) -> O(1)

Code: T:O(n) -> O(1): Path Compression + Union by rank

Code: DFS: discard points for the same island

Last updated

Was this helpful?