1.題目
題目地址(706. 設計雜湊對映 - 力扣(LeetCode))
https://leetcode.cn/problems/design-hashmap/
題目描述
不使用任何內建的雜湊表庫設計一個雜湊對映(HashMap)。
實現 MyHashMap
類:
MyHashMap()
用空對映初始化物件void put(int key, int value)
向 HashMap 插入一個鍵值對(key, value)
。如果key
已經存在於對映中,則更新其對應的值value
。int get(int key)
返回特定的key
所對映的value
;如果對映中不包含key
的對映,返回-1
。void remove(key)
如果對映中存在key
的對映,則移除key
和它所對應的value
。
示例:
輸入: ["MyHashMap", "put", "put", "get", "get", "put", "get", "remove", "get"] [[], [1, 1], [2, 2], [1], [3], [2, 1], [2], [2], [2]] 輸出: [null, null, null, 1, -1, null, 1, null, -1] 解釋: MyHashMap myHashMap = new MyHashMap(); myHashMap.put(1, 1); // myHashMap 現在為 [[1,1]] myHashMap.put(2, 2); // myHashMap 現在為 [[1,1], [2,2]] myHashMap.get(1); // 返回 1 ,myHashMap 現在為 [[1,1], [2,2]] myHashMap.get(3); // 返回 -1(未找到),myHashMap 現在為 [[1,1], [2,2]] myHashMap.put(2, 1); // myHashMap 現在為 [[1,1], [2,1]](更新已有的值) myHashMap.get(2); // 返回 1 ,myHashMap 現在為 [[1,1], [2,1]] myHashMap.remove(2); // 刪除鍵為 2 的資料,myHashMap 現在為 [[1,1]] myHashMap.get(2); // 返回 -1(未找到),myHashMap 現在為 [[1,1]]
提示:
0 <= key, value <= 106
- 最多呼叫
104
次put
、get
和remove
方法
2.題解
2.1 雜湊對映
思路
基本上同705.設計雜湊集合
變更的是內部儲存的是一個pair<int,int>對映而已
程式碼
- 語言支援:C++
C++ Code:
class MyHashMap {
private:
vector<list<pair<int, int>>> data;
static const int base = 769;
static int Hash(int key){
return key % base;
}
public:
MyHashMap() : data(base){}
void put(int key, int value) {
int n = Hash(key);
for(auto &p : data[n]){
if(key == p.first){
p.second = value;
return;
}
}
data[n].emplace_back(key,value);
}
int get(int key) {
int n = Hash(key);
for(auto it = data[n].begin(); it != data[n].end(); it++){
if(it->first == key){
return it->second;
}
}
return -1;
}
void remove(int key) {
int n = Hash(key);
for(auto it = data[n].begin(); it != data[n].end(); it++){
if(it->first == key){
data[n].erase(it);
return;
}
}
}
};
/**
* Your MyHashMap object will be instantiated and called as such:
* MyHashMap* obj = new MyHashMap();
* obj->put(key,value);
* int param_2 = obj->get(key);
* obj->remove(key);
*/
複雜度分析
令 n 為陣列長度。
- 時間複雜度:\(O(n)\)
- 空間複雜度:\(O(n)\)