思路:每次把最后一个元素移动到被删除的元素的位置,然后删除最后一个元素。使用dicts保存每个元素的位置,交换最后一个元素后,如果位置发生了变化,需要对dicts进行修改。
class RandomizedSet(object):
def __init__(self):
"""
Initialize your data structure here.
"""
self.dicts = {}
self.vals = []
def insert(self, val):
"""
Inserts a value to the set. Returns true if the set did not already contain the specified element.
:type val: int
:rtype: bool
"""
if val not in self.dicts:
self.vals.append(val)
self.dicts[val] = len(self.vals)-1
return True
else:
return False
def remove(self, val):
"""
Removes a value from the set. Returns true if the set contained the specified element.
:type val: int
:rtype: bool
"""
if val not in self.dicts:
return False
idx = self.dicts.pop(val)
self.vals[idx] = self.vals[-1]
self.vals.pop()
if idx != len(self.vals):
self.dicts[self.vals[idx]] = idx
return True
def getRandom(self):
"""
Get a random element from the set.
:rtype: int
"""
n = len(self.vals)
idx = random.randint(0,n-1)
return self.vals[idx]