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)