LeetCode-706-简单哈希映射
题目链接#
问题描述#
不使用内建的哈希库设计一个哈希映射。
MyHashMap() 用空映射初始化对象。
put(key, value) 向 HashMap 插入一个键值对 (key, value)如果 key 已经存在,则更新其对应的值 value。
get(key) 返回key 所映射的 value;如果不包含 key 的映射,返回 -1 。
remove(key) 如果存在 key 的映射,则移除 key 和它所对应的 value。
要求#
最多10^4次put get remove 的调用。
思路#
(这题让我学了静态变量, 构造函数初始化列表,list, 和 pair....😂)
-
用链地址法实现,使用C++的 vector 建立哈希表,list 作为链表,pair存储(key, value).
-
哈希函数:
key % 769;
C++代码#
class MyHashMap { // 链地址法
public:
vector<list<pair<int, int>>> Map;
static const int base = 769; // 表长
static int hash(int key) { // 哈希函数
return key%base;
}
MyHashMap() : Map(base) {}
void put(int key, int value) {
int h = hash(key);
for (auto it = Map[h].begin(); it != Map[h].end(); it++) { // 遍历链表
if ((*it).first == key) {
(*it).second = value;
return;
}
}
// 当前key的value还没有写入
Map[h].push_back(make_pair(key, value));
}
int get(int key) {
int h = hash(key);
for (auto it = Map[h].begin(); it!=Map[h].end(); it++) {
if ((*it).first == key){
return (*it).second;
}
}
return -1;
}
void remove(int key) {
int h = hash(key);
for (auto it = Map[h].begin(); it != Map[h].end(); it++) {
if ((*it).first == key) {
Map[h].erase(it);
return ;
}
}
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理