Insert Delete GetRandom O(1) LeetCode solution in JavaScript

1
var RandomizedSet = function () {
2
this._data = [];
3
this._flatData = [];
4
};
5

6
RandomizedSet.prototype.hash = function (val) {
7
return val % 1e5;
8
};
9

10
RandomizedSet.prototype.insert = function (val) {
11
const hash = this.hash(val);
12
let basket = this._data[hash];
13

14
for (let i = 0; i < basket?.length; i++) {
15
if (basket[i][0] === val) {
16
return false;
17
}
18
}
19

20
if (!basket) {
21
this._data[hash] = [[val, this._flatData.length]];
22
} else {
23
this._data[hash].push([val, this._flatData.length]);
24
}
25
this._flatData.push(val);
26
return true;
27
};
28

29
RandomizedSet.prototype.remove = function (val) {
30
const hash = this.hash(val);
31
let basket = this._data[hash];
32
if (!basket) {
33
return false;
34
}
35
for (let i = 0; i < basket.length; i++) {
36
const currBasket = basket[i];
37
if (currBasket[0] === val) {
38
const idxInFlat = currBasket[1];
39
const reassignedValueInFlat = del(this._flatData, idxInFlat);
40
// Write new address in _data if needed
41
if (reassignedValueInFlat) {
42
this._data[this.hash(reassignedValueInFlat)].forEach((item) => {
43
if (item[0] === reassignedValueInFlat) {
44
item[1] = idxInFlat;
45
return; // from forEach
46
}
47
});
48
}
49
// Delete from _data
50
del(basket, i);
51
return true;
52
}
53
}
54
return false;
55
};
56

57
RandomizedSet.prototype.getRandom = function () {
58
return this._flatData[getRandomInt(0, this._flatData.length - 1)];
59
};
60

61
function getRandomInt(min, max) {
62
min = Math.ceil(min);
63
max = Math.floor(max);
64
return Math.floor(Math.random() * (max - min + 1)) + min;
65
}
66

67
function del(arr, idx) {
68
if (!arr.length) {
69
return null;
70
}
71
if (idx === arr.length - 1) {
72
arr.pop();
73
return null;
74
}
75
arr[idx] = arr.pop();
76
return arr[idx];
77
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0