Most Stones Removed with Same Row or Column LeetCode solution in Java
1class Solution {2public int removeStones(int[][] stones) {3int ret = 0;4DisjointSet ds = new DisjointSet(stones.length);56for (int i = 0; i < stones.length; i++) {7for (int j = i + 1; j < stones.length; j++) {8int s1[] = stones[i];9int s2[] = stones[j];1011if (s1[0] == s2[0] || s1[1] == s2[1]) {12ds.union(i, j);13}14}15}16// System.out.println(Arrays.toString(ds.sets));17for (int i = 0; i < ds.sets.length; i++) {18if (ds.sets[i] < 0) ret += Math.abs(ds.sets[i]) - 1;19}2021return ret;22}2324class DisjointSet {25public int sets[];2627public DisjointSet(int size) {28sets = new int[size];29Arrays.fill(sets, -1);30}3132//33// weighted union34// union->return size in negative35public int union(int idx1, int idx2) {36int p1 = find(idx1);37int p2 = find(idx2);3839if (p1 == p2) { // same parent so directly returning size40return sets[p1];41} else {42int w1 = Math.abs(sets[p1]);43int w2 = Math.abs(sets[p2]);4445if (w1 > w2) {46sets[p2] = p1;4748// collapsing FIND49sets[idx1] = p1;50sets[idx2] = p1;5152return sets[p1] = -(w1 + w2);53} else {54sets[p1] = p2;5556// collapsing FIND57sets[idx1] = p2;58sets[idx2] = p2;5960return sets[p2] = -(w1 + w2);61}62}63}6465// collapsing FIND66// find parent67public int find(int idx) {68int p = idx;69while (sets[p] >= 0) {70p = sets[p];71}72return p;73}74}75}