想法:建立一个大小为1000的hash table,透过hash function,将key转换成hash value。
代码:
class MyHashMap:
def __init__(self):
#建立一个大小为1000的hash table。
self.size = 1000
self.table = [None] * self.size
#建立一个hash function,计算每一个key对应的hash value。
def hash_function(self, key):
return key % self.size
#在以下三个操作put、get、remove中,我们首先计算hash value。
def put(self, key: int, value: int) -> None:
hv = self.hash_function(key)
#根据hash value,找到hash table中对应的位置。
#如果这个位置没有bucket,我们建立一个bucket,并放入[key, value]。
if self.table[hv] == None:
self.table[hv] = [[key, value]]
else:
#如果有bucket,遍历这个bucket,寻找包含key的list。
for index, kv in enumerate(self.table[hv]):
if kv[0] == key:
self.table[hv][index][1] = value #修改为新的value
return
#如果没有找到对应key的list,添加一个。
self.table[hv].append([key,value])
def get(self, key: int) -> int:
hv = self.hash_function(key)
#如果这个位置没有bucket,直接返回-1。
if self.table[hv] == None:
return -1
else:
#如果有bucket,寻找包含key的list。
for index, kv in enumerate(self.table[hv]):
if kv[0] == key:
return self.table[hv][index][1]
return -1
def remove(self, key: int) -> None:
hv = self.hash_function(key)
#先确认这个位置是否有bucket。
#再遍历这个bucket,找到包含key的list并移除。
if self.table[hv] != None:
for li in self.table[hv]:
if li[0] == key:
self.table[hv].remove(li)
# Your MyHashMap object will be instantiated and called as such:
# obj = MyHashMap()
# obj.put(key,value)
# param_2 = obj.get(key)
# obj.remove(key)