想法:我们可以建立一个hash table,因为key的最大值为1000000,我们可以把hash table的大小定义为10000。接着定义hash function,透过计算hash value,找出这个key在hash table中的位置。
代码:
class MyHashSet:
def __init__(self):
#建立一个大小为10000的hash table。
self.size = 10000
self.table = [None] * self.size
#建立一个hash function
def hash_function(self, key):
return key % self.size
#在以下的3种操作中,我们先计算出hash value。
def add(self, key: int) -> None:
hv = self.hash_function(key)
#利用hash value,检查在hash table的这个位置是否已经有一个bucket。
#如果没有,我们在这个位置建立一个bucket,就是[key]。
#如果有bucket,我们把key添加到bucket中。
if self.table[hv] == None:
self.table[hv] = [key]
else:
self.table[hv].append(key)
def remove(self, key: int) -> None:
hv = self.hash_function(key)
#利用hash value,检查在hash table的这个位置是否已经有一个bucket。
#如果有,找出这个bucket里的所有key,并移除。
if self.table[hv] != None:
while key in self.table[hv]:
self.table[hv].remove(key)
def contains(self, key: int) -> bool:
hv = self.hash_function(key)
#利用hash value,检查在hash table的这个位置是否已经有一个bucket。
#如果有,确认key是否在这个bucket里面。
if self.table[hv] != None:
return key in self.table[hv]
return False
# Your MyHashSet object will be instantiated and called as such:
# obj = MyHashSet()
# obj.add(key)
# obj.remove(key)
# param_3 = obj.contains(key)