Skip to content

Commit e889e9b

Browse files
committedAug 1, 2024
Time: 281 ms (53.74%) | Memory: 68.4 MB (46.14%) - LeetSync
1 parent 255e9b3 commit e889e9b

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
class RandomizedCollection:
2+
def __init__(self):
3+
self.elements = []
4+
self.index_map = defaultdict(set)
5+
6+
def insert(self, value: int) -> bool:
7+
self.elements.append(value)
8+
self.index_map[value].add(len(self.elements) - 1)
9+
return len(self.index_map[value]) == 1
10+
11+
def remove(self, value: int) -> bool:
12+
if not self.index_map[value]:
13+
return False
14+
15+
remove_index = self.index_map[value].pop()
16+
last_element = self.elements[-1]
17+
18+
if remove_index != len(self.elements) - 1:
19+
self.elements[remove_index] = last_element
20+
self.index_map[last_element].add(remove_index)
21+
self.index_map[last_element].remove(len(self.elements) - 1)
22+
23+
self.elements.pop()
24+
if not self.index_map[value]:
25+
del self.index_map[value]
26+
27+
return True
28+
29+
def getRandom(self) -> int:
30+
return random.choice(self.elements)
31+
32+
33+
34+
35+
# Your RandomizedCollection object will be instantiated and called as such:
36+
# obj = RandomizedCollection()
37+
# param_1 = obj.insert(val)
38+
# param_2 = obj.remove(val)
39+
# param_3 = obj.getRandom()

0 commit comments

Comments
 (0)
Please sign in to comment.