1
var minimumHammingDistance = function (source, target, allowedSwaps) {2
const n = source.length;9
for (let i = 0; i < n; i++) {10
const srcNum = source[i];14
members[i] = new Map();15
members[i].set(srcNum, 1);19
if (uf[x] != x) uf[x] = find(uf[x]);23
function union(x, y) {24
const rootX = find(x);25
const rootY = find(y);27
if (rootX === rootY) return;29
if (sizes[rootX] > sizes[rootY]) {31
sizes[rootX] += sizes[rootY];33
for (const [num, count] of members[rootY]) {34
if (!members[rootX].has(num)) members[rootX].set(num, 0);35
members[rootX].set(num, members[rootX].get(num) + count);39
sizes[rootY] += sizes[rootX];41
const num = source[x];43
for (const [num, count] of members[rootX]) {44
if (!members[rootY].has(num)) members[rootY].set(num, 0);45
members[rootY].set(num, members[rootY].get(num) + count);50
for (const [idx1, idx2] of allowedSwaps) {56
for (let i = 0; i < n; i++) {57
const srcNum = source[i];58
const tarNum = target[i];60
const group = find(i);62
if (members[group].has(tarNum)) {63
members[group].set(tarNum, members[group].get(tarNum) - 1);64
if (members[group].get(tarNum) === 0) members[group].delete(tarNum);