Search⌘ K
AI Features

Most Stones Removed with Same Row or Column

Explore how to use union find to solve the problem of removing the maximum number of stones from a 2D plane where stones can be removed if they share the same row or column with another stone not yet removed. Understand problem constraints and implement an efficient C++ solution.

Statement

Given an array of nn stones in a two-dimensional plane, where each stone is represented by a pair of x and y coordinates, find the maximum number of stones we can remove with the following condition:

A stone can be removed if it shares either the same row or the same column with another stone that has not been removed so far.

Stones are provided as an array, stones, of length nn, where stones[i]=[xi,yi]stones[i] = [x_i, y_i] represents the ithi^{th} stone. Return the maximum possible number of stones that can be removed.

Constraints:

  • 11\leq stones.length 1000\leq 1000
  • 0xi,yi500\leq x_i, y_i \leq50

Examples

Understand the problem

Let’s take a moment to make sure you’ve correctly understood the problem. The quiz below helps you check if you’re solving the correct problem:

Most Stones Removed with Same Row or Column

1.

What is the maximum number of stones we can remove for the following input?

stones = [[0, 1],[1, 0],[1, 1],[2, 0]]

A.

0

B.

3

C.

4

D.

1


1 / 4

Figure it out!

We have a game for you to play. Rearrange the logical building blocks to develop a clearer understanding of how to solve this problem.

Sequence - Vertical
Drag and drop the cards to rearrange them in the correct sequence.

1
2
3
4

Try it yourself

Implement your solution in RemoveStones.cpp in the following coding playground. The supporting code template provided in UnionFind.cpp is meant to assist in developing your solution to the problem.

C++
usercode > RemoveStones.cpp
/*
⬅️ We have provided a UnionFind.cpp file under the "Files" tab
of this widget. You can use this file to build your solution.
*/
#include "UnionFind.cpp"
int RemoveStones(vector<vector<int>> & stones)
{
// Replace this placeholder return statement with your code
return -1;
}
Most Stones Removed with Same Row or Column