当前位置:网站首页>Leetcode 705.设计哈希集合
Leetcode 705.设计哈希集合
2022-07-29 21:24:00 【cwtnice】
原题链接:Leetcode 705. Design HashSet
Design a HashSet
without using any built-in hash table libraries.
Implement MyHashSet
class:
void add(key)
Inserts the value key into the HashSet.bool contains(key)
Returns whether the value key exists in the HashSet or not.void remove(key)
Removes the value key in the HashSet. If key does not exist in the HashSet, do nothing.
Example 1:
Input
["MyHashSet", "add", "add", "contains", "contains", "add", "contains", "remove", "contains"]
[[], [1], [2], [1], [3], [2], [2], [2], [2]]
Output
[null, null, null, true, false, null, true, null, false]
Explanation
MyHashSet myHashSet = new MyHashSet();
myHashSet.add(1); // set = [1]
myHashSet.add(2); // set = [1, 2]
myHashSet.contains(1); // return True
myHashSet.contains(3); // return False, (not found)
myHashSet.add(2); // set = [1, 2]
myHashSet.contains(2); // return True
myHashSet.remove(2); // set = [1]
myHashSet.contains(2); // return False, (already removed)
Constraints:
- 0 <= key <= 106
- At most 104 calls will be made to add, remove, and contains.
方法一:链地址法
思路:
用链地址法来解决冲突
C++代码:
class MyHashSet {
private:
// 用链地址法 同义词在一个链表上
vector<list<int>> hash_table;
// 设置一个质数m
static const int m = 11;
// 哈希函数
static int hash(int key) {
return key % m;
}
public:
MyHashSet(): hash_table(m) {
}
// 插入
void add(int key) {
int h = hash(key);
// 遍历 如果没有就插入
for (auto it = hash_table[h].begin(); it != hash_table[h].end(); it++) {
if ((*it) == key) {
return;
}
}
hash_table[h].push_back(key);
}
// 删除
void remove(int key) {
int h = hash(key);
for (auto it = hash_table[h].begin(); it != hash_table[h].end(); it++) {
if ((*it) == key) {
hash_table[h].erase(it);
return;
}
}
}
// 是否存在
bool contains(int key) {
int h = hash(key);
for (auto it = hash_table[h].begin(); it != hash_table[h].end(); it++) {
if ((*it) == key) {
return true;
}
}
return false;
}
};
/** * Your MyHashSet object will be instantiated and called as such: * MyHashSet* obj = new MyHashSet(); * obj->add(key); * obj->remove(key); * bool param_3 = obj->contains(key); */
边栏推荐
- GBASE 8s 数据库的逻辑日志备份
- iNFTnews | 福布斯的Web3探索
- 银河麒麟V10 SP2 x86编译安装 PHP7.4
- GBASE 8s 数据库的大对象和日志备份
- 容器网络硬核技术内幕 (26) 知微知彰,知柔知刚 (下)
- 《nlp入门+实战:第七章:pytorch中数据集加载和自带数据集的使用》
- Panorama Tutorial丨How to shoot sunrise and sunset scenes in VR panoramic shooting?
- 程序员自由工作的三大痛点?一文教你统统解决
- 【Verilog】Verilog设计进阶
- Second Best PyTorch Beginner Course; Thesis Writing Guide; Using µGo to Develop a Mini Compiler; Super Efficient Use of Transformer's Extension Library; Frontier Papers | ShowMeAI News Daily
猜你喜欢
随机推荐
C语言操作符详解(1)
全球都热炸了,谷歌服务器已经崩掉了
关于云计算的海量数据存储模型[通俗易懂]
GBASE 8s 如何通过脚本获取bufwait等统计信息
官宣!苏州吴江开发区上线电子劳动合同平台
VSCode 插件大全
【ORM框架:Sequelize的查询】
WeChat Mini Program 30 Customizing Templates and Obtaining User Login Credentials
第3章业务功能开发(线索关联市场活动,动态搜索)
An article to understand service governance in distributed development
Analysis of Crypto in Pi 2
940. Different subsequences II
刚重装的win7系统不能上网(深度系统安装步骤)
使用脚本安装mysql
获取七牛云地址文件保存到本地
解决报错 WARNING: IPv4 forwarding is disabled. Networking will not work.
linux使用脚本安装redis
转:idea中language level设置
OPEN数据 | 新库上线 | CnOpenDataA股上市公司社会责任报告数据
Official announcement!Suzhou Wujiang Development Zone launches electronic labor contract platform