题解
有些想法,图也画出,但总以为是规律,但其实是算法
并查集 之前并查集已经学过,可以翻看我的博客~
如果是深入理解可以理解为bfs或dfs
如果是行相同或者列相同,那么就进行合并,把他们合并为一个连通分支中去,最后查找的是独立的分量即 总点数-连通分支数,因为每个分支都会剩下一个,剩下的就是连通分支数,总点数-连通分支数即为要留下的数量
代码
class Solution {
public:
int pre[1005];
void init(int n){
for(int i = 0; i < n; i++){
pre[i] = i;
}
}
int find(int x){
while(x != pre[x]){
x = pre[x];
}
return x;
}
void join(int a,int b){
int temp_a = find(a),temp_b = find(b);
if(temp_a != temp_b){
pre[temp_a] = temp_b;
}
}
int removeStones(vector<vector<int>>& stones) {
int n = stones.size();
if(n == 0)
{
return 0;
}
init(n);
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] ){
join(i,j);
}
}
}
int res = 0;
for(int i = 0; i < n; i++)
{
if(pre[i] == i)
{
res++;
}
}
return n - res;
}
};