705. 设计哈希集合
不使用任何内建的哈希表库设计一个哈希集合(HashSet)。
实现 MyHashSet
类:
void add(key)
向哈希集合中插入值key
。bool contains(key)
返回哈希集合中是否存在这个值key
。void remove(key)
将给定值key
从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。
示例:
1 | 输入: |
**提示:**
0 <= key <= 106
- 最多调用
104
次add
、remove
和contains
。
方法一:链地址法
设哈希表的大小为 base,hash 函数为hash(x) = x mod base
,base 取质数 769。
数组中每个位置是一个链表,当计算出哈希值后,就插入对应链表中。
1 | class MyHashSet { |
- 时间复杂度O(n/b),n为哈希表中的元素数量,b 为链表的数量,假设链表长度为均匀的。
- 空间复杂度O(n + b)