Advertisement
kosievdmerwe

Untitled

Oct 20th, 2021
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.50 KB | None | 0 0
  1. class RandomizedSet:
  2.  
  3.     def __init__(self):
  4.         self.value_map = {}
  5.         self.values = []
  6.         self.free_idxes = set()
  7.  
  8.     def insert(self, val: int) -> bool:
  9.         if val in self.value_map:
  10.             return False
  11.        
  12.         if self.free_idxes:
  13.             idx = self.free_idxes.pop()
  14.         else:
  15.             idx = len(self.values)
  16.             self.values.append(None)
  17.         self.value_map[val] = idx
  18.         self.values[idx] = val
  19.         return True
  20.  
  21.     def remove(self, val: int) -> bool:
  22.         if val not in self.value_map:
  23.             return False
  24.        
  25.         idx = self.value_map[val]
  26.         del self.value_map[val]
  27.         self.values[idx] = None
  28.         self.free_idxes.add(idx)
  29.        
  30.         if len(self.values) < len(self.free_idxes) * 2:
  31.             self.reindex()
  32.        
  33.         return True
  34.    
  35.     def reindex(self) -> None:
  36.         idx = 0
  37.         for val in self.value_map.keys():
  38.             self.values[idx] = val
  39.             self.value_map[val] = idx
  40.             idx += 1
  41.        
  42.         self.free_idxes = set()
  43.         del self.values[idx:]
  44.  
  45.     def getRandom(self) -> int:
  46.         while True:
  47.             idx = random.randint(0, len(self.values) - 1)
  48.             if self.values[idx] is not None:
  49.                 return self.values[idx]
  50.  
  51.  
  52. # Your RandomizedSet object will be instantiated and called as such:
  53. # obj = RandomizedSet()
  54. # param_1 = obj.insert(val)
  55. # param_2 = obj.remove(val)
  56. # param_3 = obj.getRandom()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement