package
0.0.0-20241125063422-a7e1e0bf04b0
Repository: https://github.com/blueblue0102/leetcode-go.git
Documentation: pkg.go.dev
# README
706. Design HashMap
https://leetcode.com/problems/design-hashmap/
需要先了解 hash map 的底層是如何運作
-
hash function
決定 key 值要透過什麼演算法進行 hash
已知題目的 key 資料型態限定為 int
所以 hash 的方式採用對質數取餘數 modulo 的方式
至於要用哪個質數,由於題目已限定 key 介於 $0 ~ 10^6$ 之間
所以我個人隨便根據質數表取個2131
這樣即表示,至多會有2131
個 bucket -
collision handling
當發生碰撞時,處理機制為何
處理方式大致可以分為兩類,Open Addressing 和 Separate ChainingOpen Addressing: Linear Probing, Quadratic Probing, Double Hashing...
Separate Chaining: bucket(linked list)決定採用 Separate Chaining 的方式
因此 hash map 的本質將會是 []Linked List -
hash map 的空間擴張及減縮
就像 Dynamic Sized Arrays 一樣的概念
當 hash map 的內容越多時就需要考慮宣告空間的擴充
當內容刪除時,所宣告的空間需要釋放
但看了 leetcode 裡的討論區,似乎較少討論這件事
因此忽略這件事
有了以上這些知識之後便能開始進行實作
Takeaway
- hash table 的底層運作