【LetMeFly】705.设计哈希集合:很多人都是这样做的吧【逃】
力扣题目链接:https://leetcode.cn/problems/design-hashset/
不使用任何内建的哈希表库设计一个哈希集合(HashSet)。
实现 MyHashSet
类:
void add(key)
向哈希集合中插入值key
。bool contains(key)
返回哈希集合中是否存在这个值key
。void remove(key)
将给定值key
从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。
示例:
输入: ["MyHashSet", "add", "add", "contains", "contains", "add", "contains", "remove", "contains"] [[], [1], [2], [1], [3], [2], [2], [2], [2]] 输出: [null, null, null, true, false, null, true, null, false] 解释: MyHashSet myHashSet = new MyHashSet(); myHashSet.add(1); // set = [1] myHashSet.add(2); // set = [1, 2] myHashSet.contains(1); // 返回 True myHashSet.contains(3); // 返回 False ,(未找到) myHashSet.add(2); // set = [1, 2] myHashSet.contains(2); // 返回 True myHashSet.remove(2); // set = [1] myHashSet.contains(2); // 返回 False ,(已移除)
提示:
0 <= key <= 106
- 最多调用
104
次add
、remove
和contains
解题方法:只要数组足够大,就不会冲突
Easy题就按Easy的方法做好了。注意到这题数据范围是 0 ≤ k e y ≤ 1 0 6 0\leq key \leq 10^6 0≤key≤106,因此只需要开辟一个大小为 1 0 6 + 1 10^6+1 106+1的布尔类型的数组 h a s h s e t hashset hashset:
- a d d add add操作时将 h a s h s e t [ k e y ] hashset[key] hashset[key]设置为 t r u e true true
- r e m o v e remove remove操作时将 h a s h s e t [ k e y ] hashset[key] hashset[key]设置为 f a l s e false false
- c o n t a i n s contains contains操作时返回 h a s h s e t [ k e y ] hashset[key] hashset[key]的值
以上。
- 时间复杂度:初始化 O ( C ) O(C) O(C),单次操作 O ( 1 ) O(1) O(1)
- 空间复杂度:初始化 O ( C ) O(C) O(C),单次操作 O ( 1 ) O(1) O(1)
AC代码
C++
class MyHashSet { // 1k天偷个懒
private:
vector<bool> hashset;
public:
MyHashSet() {
hashset.resize(1e6 + 1);
}
void add(int key) {
hashset[key] = true;
}
void remove(int key) {
hashset[key] = false;
}
bool contains(int key) {
return hashset[key];
}
};
Python
class MyHashSet: # easy题很多人都是这么写的吧[逃]
def __init__(self):
self.hashset = [False] * 1_000_001
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]
同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/137738309