Minimize Hamming Distance After Swap Operations LeetCode solution in JavaScript

1
var minimumHammingDistance = function (source, target, allowedSwaps) {
2
const n = source.length;
3

4
const uf = {};
5
const sizes = {};
6
const members = {};
7

8
// initial setup
9
for (let i = 0; i < n; i++) {
10
const srcNum = source[i];
11

12
uf[i] = i;
13
sizes[i] = 1;
14
members[i] = new Map();
15
members[i].set(srcNum, 1);
16
}
17

18
function find(x) {
19
if (uf[x] != x) uf[x] = find(uf[x]);
20
return uf[x];
21
}
22

23
function union(x, y) {
24
const rootX = find(x);
25
const rootY = find(y);
26

27
if (rootX === rootY) return;
28

29
if (sizes[rootX] > sizes[rootY]) {
30
uf[rootY] = rootX;
31
sizes[rootX] += sizes[rootY];
32

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);
36
}
37
} else {
38
uf[rootX] = rootY;
39
sizes[rootY] += sizes[rootX];
40

41
const num = source[x];
42

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);
46
}
47
}
48
}
49

50
for (const [idx1, idx2] of allowedSwaps) {
51
union(idx1, idx2);
52
}
53

54
let mismatches = 0;
55

56
for (let i = 0; i < n; i++) {
57
const srcNum = source[i];
58
const tarNum = target[i];
59

60
const group = find(i);
61

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);
65
} else {
66
mismatches++;
67
}
68
}
69

70
return mismatches;
71
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0