根据题意我们可以得到一个很有趣的结论:处于同一行或者同一列的石头是共处一个集合的,而一个集合最终可以消除到只剩一个石头。(可以实验一下)
因此我们采取并查集实现。
Code
class Solution { public: int sum=0; int father[1005]; map<int ,int >mapx; map<int ,int >mapy; int find(int x){ if (father[x]!=x){ father[x]=find(father[x]); } return father[x]; } void Union(int x,int y){ int fx=find(x); int fy=find(y); if (fx!=fy){ father[fx]=fy; sum--; } } int removeStones(vector<vector<int>>& stones) { int n=stones.size(); sum=n; for(int i=0;i<n;i++) father[i]=i; for (int i=0;i<n;i++){ if (mapx.count(stones[i][0])){ Union(i,mapx[stones[i][0]]); } else mapx[stones[i][0]]=i; if (mapy.count(stones[i][1])){ Union(i,mapy[stones[i][1]]); } else mapy[stones[i][1]]=i; } return n-sum; } };
标签:fy,fx,int,947,sum,father,同列,移除,find From: https://www.cnblogs.com/purple123/p/18015228