Leetcode 947、移除最多的同行或同列石头
并查集
class Solution {
public int removeStones(int[][] stones) {
int len = stones.length;
UnionFindSet unionFindSet = new UnionFindSet(len);
for(int i = 0; i < len; i++) {
for(int j = 0; j < len; j++) {
if(stones[i][0] == stones[j][0] || stones[i][1] == stones[j][1]) {
unionFindSet.union(i, j);
}
}
}
return len - unionFindSet.getCount();
}
class UnionFindSet{
int num;
int[] parent;
public UnionFindSet(int num) {
this.num = num;
parent = new int[num];
for(int i = 0; i < num; i++) {
parent[i] = i;
}
}
public int find(int x) {
if(x != parent[x]) parent[x] = find(parent[x]);
return parent[x];
}
public void union(int x, int y) {
int px = find(x);
int py = find(y);
if(px != py) {
if(px >= py) {
parent[py] = px;
}else{
parent[px] = py;
}
}
}
public int getCount() {
int result = 0;
for(int i = 0; i < num; i++) {
if(parent[i] == i) {
result++;
}
}
return result;
}
}
}