380. O(1) 时间插入、删除和获取随机元素 - 力扣(LeetCode)
class RandomizedSet:def __init__(self):self.data = [] # 存储元素的列表self.index_map = {} # 哈希表,存储元素及其索引 def insert(self, val: int) -> bool:if val in self.index_map:return Falseself.data.append(val) # 将元素添加到数组末尾self.index_map[val] = len(self.data) - 1 # 在哈希表中记录索引return Truedef remove(self, val: int) -> bool:if val not in self.index_map:return False# 获取要删除元素的索引idx = self.index_map[val]last_element = self.data[-1] # 获取数组的最后一个元素# 将最后一个元素移动到要删除元素的位置self.data[idx] = last_elementself.index_map[last_element] = idx# 删除数组末尾的元素self.data.pop()del self.index_map[val] # 从哈希表中移除该元素return True def getRandom(self) -> int:return random.choice(self.data)# Your RandomizedSet object will be instantiated and called as such:
# obj = RandomizedSet()
# param_1 = obj.insert(val)
# param_2 = obj.remove(val)
# param_3 = obj.getRandom()