Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
380. Insert Delete GetRandom O(1)
  • Loading branch information
Mahim1997 committed Dec 12, 2022
commit 0ebc8a9bdd962a7fe05a782888e8e7fa321b20f0
57 changes: 57 additions & 0 deletions java/380-Insert-Delete-GetRandom-O(1).java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
class RandomizedSet {
private Map<Integer, Integer> indexing;
private List<Integer> numbers;

public RandomizedSet() {
this.indexing = new HashMap<>();
this.numbers = new ArrayList<>();
}

// Append to the end, maintain indexing
// Delete by swapping with the end, maintain indexing
// Get random by getting a random index wrt list's size

public boolean insert(int val) {
if(this.indexing.containsKey(val)) {
return false;
}
int indexInsert = this.numbers.size();
this.numbers.add(val);
this.indexing.put(val, indexInsert);
return true;
}

public boolean remove(int val) {
if(!this.indexing.containsKey(val)) {
return false;
}

int lastIndex = this.numbers.size() - 1;
int lastElement = this.numbers.get(lastIndex);
int indexElement = this.indexing.get(val);

// Swap with last element
this.numbers.set(indexElement, lastElement);

// Update indices [Add & Delete]
this.indexing.put(lastElement, indexElement);
this.indexing.remove(val);

// Remove from list
this.numbers.remove(lastIndex);
return true;
}

public int getRandom() {
int randomIndex = (int) (Math.random() * this.numbers.size());
return this.numbers.get(randomIndex);
}
}

/**
* Your RandomizedSet object will be instantiated and called as such:
* RandomizedSet obj = new RandomizedSet();
* boolean param_1 = obj.insert(val);
* boolean param_2 = obj.remove(val);
* int param_3 = obj.getRandom();
*/