题目描述:不使用任何内建的哈希表库设计一个哈希集合(HashSet)。
实现 MyHashSet 类:
void add(key) 向哈希集合中插入值 key 。
bool contains(key) 返回哈希集合中是否存在这个值 key 。
void remove(key) 将给定值 key 从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。
提示:
0 <= key <= 106
最多调用 104 次 add、remove 和 contains
难点:如何通过不使用内置的哈希表库设计呢? 设计的函数需要和哈希set数据结构的性质一样,即add,remove,contain都是O(1)的时间复杂度。
题解:因为题目给出了一个提示:0 <= key <= 1000000,即告诉了所有值的范围是多少,然后哈希表可以用数组来创建,所以这很自然地想到了用数组来构建哈希set。
class MyHashSet:
def __init__(self):
self.hashset = [False]*1000001 #能表示0到1000000
def add(self, key: int) -> None:
self.hashset[key] = True
def remove(self, key: int) -> None:
self.hashset[key] = False
def contains(self, key: int) -> bool:
return self.hashset[key]