python-leetcode-O(1) 时间插入、删除和获取随机元素
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 False
self.data.append(val) # 将元素添加到数组末尾
self.index_map[val] = len(self.data) - 1 # 在哈希表中记录索引
return True
def 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_element
self.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()