From 5665102dc64bc59594c9a814bc47a2e244995180 Mon Sep 17 00:00:00 2001 From: Kaushik Narayan R Date: Wed, 11 Jun 2025 22:19:28 -0700 Subject: [PATCH] yuh --- 380-insert-delete-getrandom-o1/soln.py | 31 ++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 380-insert-delete-getrandom-o1/soln.py diff --git a/380-insert-delete-getrandom-o1/soln.py b/380-insert-delete-getrandom-o1/soln.py new file mode 100644 index 0000000..79f3028 --- /dev/null +++ b/380-insert-delete-getrandom-o1/soln.py @@ -0,0 +1,31 @@ +import random + + +# https://stackoverflow.com/questions/15993447/python-data-structure-for-efficient-add-remove-and-random-choice +class RandomizedSet: + def __init__(self): + self.store = [] + self.indices = {} + + def insert(self, val: int) -> bool: + if val in self.indices: + return False + self.indices[val] = len(self.store) + self.store.append(val) + return True + + def remove(self, val: int) -> bool: + if val not in self.indices: + return False + val_pos = self.indices.pop(val) + last_val = self.store.pop() + # if target was not at end, we popped something else + # so overwrite target's position with it and update its pos + # all O(1) operations + if val_pos != len(self.store): + self.store[val_pos] = last_val + self.indices[last_val] = val_pos + return True + + def getRandom(self) -> int: + return random.choice(self.store)