我没看懂这道题是什么意思,网上的解析是:
把在同一行或者同一列的两个石头看做是连通的,然后利用并查集求连通分量个数。答案=石头总数n-连通分量个数。
代码:
class Solution {
public:
int f[1010];
int getf(int u)
{
return f[u]==u?u:f[u]=getf(f[u]);
}
void unionf(int u,int v)
{
f[u] = v;
}
int removeStones(vector<vector<int>>& stones) {
int n = stones.size();
int fu,fv;
for(int i=0;i<n;i++) f[i] = i;
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
if (stones[i][0] == stones[j][0] || stones[i][1] == stones[j][1])
{
fu = getf(i);
fv = getf(j);
if(fu != fv) unionf(fu,fv);
}
}
}
int num = 0;
for(int i=0;i<n;i++)
{
if(f[i] == i) num++;
}
return n - num;
}
};