当前位置:网站首页>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); */
边栏推荐
- 华为畅享50 Pro评测:HarmonyOS加持 更流畅更安全
- 【HDLBits 刷题】Verilog Language(4)Procedures 和 More Verilog Features 部分
- 给pdf添加已作废标识
- VSCode 插件大全
- 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
- GBASE 8s 数据库的大对象和日志备份
- 在Ferora35中安装oracle-database-xe-21c
- 容器网络硬核技术内幕 (24) 知微知彰,知柔知刚 (上)
- 【点云】M3DeTR: Multi-representation, Multi-scale, Mutual-relation 3D Object Detection with Transformers
- 关于 golang 错误处理的一些优化想法
猜你喜欢

Add a logo to the upper left corner of the picture, add time and address to the lower left corner, and wrap the line when the address reaches the specified length

Qualcomm WLAN framework learning (31) -- Power save

Huawei Enjoy 50 Pro evaluation: HarmonyOS blessing is smoother and safer
![LeetCode 593 Valid Squares [Math] HERODING's Road to LeetCode](/img/c2/34624c9c7693ba40d0b3724c0db611.png)
LeetCode 593 Valid Squares [Math] HERODING's Road to LeetCode

程序员「小镇做题」出身,月薪是父母半年收入 ……

VSCode 插件大全

初识网络的简单概念

品牌广告投放平台的中台化应用与实践

5V升压充电8.4V芯片

第3章业务功能开发(线索关联市场活动,插入数据并查询)
随机推荐
Huawei Enjoy 50 Pro evaluation: HarmonyOS blessing is smoother and safer
容器网络硬核技术内幕 (24) 知微知彰,知柔知刚 (上)
IDEA 快捷键
方法的传递
leetcode122. Best Time to Buy and Sell Stock II
JS教程之 ElectronJS 自定义标题栏
Verilog 加法器设计
The implementation of the flood control project and safety construction project in the flood storage and detention areas in Luluze and Ningjinbo was launched
华为畅享50 Pro评测:HarmonyOS加持 更流畅更安全
linux使用脚本安装redis
SwiftUI 手势大全之可用的手势类型有哪些(教程含源码)
第3章业务功能开发(线索关联市场活动,插入数据并查询)
《nlp入门+实战:第七章:pytorch中数据集加载和自带数据集的使用》
GBASE 8s 自定义存储过程和函数示例
小程序预览pdf
5 V booster charge 8.4 V chip
模型评价指标汇总(持续更新)
bright day
关于 golang 错误处理的一些优化想法
24小时伦敦金走势图分析