2
public int minSwapsCouples(int[] row) { // Union -Find pairs for 23
Map<Integer, Integer> parents = new HashMap<>();5
for (int i = 0; i < row.length; i += 2) {6
int parent = Math.min(row[i], row[i + 1]);7
int child = Math.max(row[i], row[i + 1]);8
parents.put(parent, child);10
for (int i = 0; i < row.length; i += 2) {11
if ((parents.containsKey(i) && parents.get(i) == (i + 1))12
|| (parents.containsKey(i - 1) && parents.get(i - 1) == i)) continue;14
int curChild = parents.get(i);15
int correctChildsChild = parents.get(i + 1);16
parents.remove(i + 1); // remove mapping of 1 in eg) //0,2 ; 1,317
parents.put(Math.min(curChild, correctChildsChild), Math.max(curChild, correctChildsChild));18
// add mapping 2->7 , also place smaller number as parent for eg)//0,4 ; 1,319
parents.put(i, i + 1);