File tree 1 file changed +39
-0
lines changed
381-insert-delete-getrandom-o1-duplicates-allowed
1 file changed +39
-0
lines changed Original file line number Diff line number Diff line change
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()
You can’t perform that action at this time.
0 commit comments