Insert Delete GetRandom O(1)
MediumArrayHash TableMathDesignRandomized
Solution
export class RandomizedSet {
private readonly map: Map<number, number>;
private readonly arr: Array<number>;
constructor() {
this.map = new Map();
this.arr = [];
}
private swap(index1: number, index2: number) {
const temp = this.arr[index1];
this.arr[index1] = this.arr[index2];
this.arr[index2] = temp;
}
public insert(val: number): boolean {
if (this.map.has(val)) {
return false;
}
this.map.set(val, this.arr.length);
this.arr.push(val);
return true;
}
public remove(val: number): boolean {
const index = this.map.get(val);
if (index === undefined) {
return false;
}
this.swap(index, this.arr.length - 1);
this.arr.pop();
this.map.set(this.arr[index], index);
this.map.delete(val);
return true;
}
private getRandomIndex() {
return Math.floor(Math.random() * this.arr.length);
}
public getRandom(): number {
const randomIndex = this.getRandomIndex();
return this.arr[randomIndex];
}
}