Design
LeetCode 460: LFU Cache
·2 分鐘
LeetCode
Hard
Hash-Table
Linked-List
Design
Doubly-Linked-List
LeetCode 460 解題筆記:key → 節點、freq → 雙向鏈結串列,再記一個 min_freq;同頻率裡用 LRU 決定淘汰誰
LeetCode 146: LRU Cache
·2 分鐘
LeetCode
Medium
Hash-Table
Linked-List
Design
Doubly-Linked-List
LeetCode 146 解題筆記:雜湊表找節點、雙向鏈結串列維護使用順序;get 和更新既有的 key 都要移到最前面
LeetCode 449: Serialize and Deserialize BST
·1 分鐘
LeetCode
Medium
String
Tree
Depth-First-Search
Breadth-First-Search
Design
Binary-Search-Tree
Binary-Tree
LeetCode 449 解題筆記:BST 只要存前序,不用空節點標記;反序列化帶著上下界遞迴,O(n)
LeetCode 297: Serialize and Deserialize Binary Tree
·1 分鐘
LeetCode
Hard
String
Tree
Depth-First-Search
Breadth-First-Search
Design
Binary-Tree
LeetCode 297 解題筆記:前序遍歷加上空節點標記就能唯一還原樹;反序列化用迭代器依序取值
LeetCode 173: Binary Search Tree Iterator
·1 分鐘
LeetCode
Medium
Stack
Tree
Design
Binary-Search-Tree
Binary-Tree
Iterator
LeetCode 173 解題筆記:攤平成陣列很直接但用 O(n) 空間;follow-up 用 stack 存左側鏈,均攤 O(1)、空間 O(h)
Segment Tree 與 Fenwick Tree
·2 分鐘
演算法
Segment-Tree
Binary-Indexed-Tree
Design
單點更新、區間查詢:Fenwick Tree(樹狀陣列)用 i & -i 跳,線段樹用遞迴把區間切兩半;兩者都是每次操作 O(log n)
Queue 與設計題
·2 分鐘
演算法
Queue
Design
Iterator
Lazy-Deletion
環狀佇列、交錯迭代器、FIFO 配對加上取消,以及設計題常用的資料結構組合
LeetCode 716: Max Stack
·2 分鐘
LeetCode
Hard
Stack
Heap
Design
Lazy-Deletion
LeetCode 716 解題筆記:stack 和 heap 都存唯一 id,刪除只記 id,查詢時再丟掉已刪除的;用值記錄會分不清重複的元素
LeetCode 622: Design Circular Queue
·1 分鐘
LeetCode
Medium
Queue
Design
Array
LeetCode 622 解題筆記:固定大小陣列加上 head 和 count,位置都對容量取模,空和滿用 count 判斷
LeetCode 2102: Sequentially Ordinal Rank Tracker
·1 分鐘
LeetCode
Hard
Heap
Design
Two-Heaps
LeetCode 2102 解題筆記:雙 heap 維持「前 k 名」和「其他」,自訂 lt 處理字串的反向比較
LeetCode 307: Range Sum Query - Mutable
·2 分鐘
LeetCode
Medium
Segment-Tree
Binary-Indexed-Tree
Design
Array
LeetCode 307 解題筆記:單點更新加區間和,前綴和每次更新要 O(n);用線段樹或 Fenwick Tree,兩種操作都是 O(log n)
LeetCode 281: Zigzag Iterator
·1 分鐘
LeetCode
Medium
Queue
Design
Iterator
LeetCode 281 解題筆記:queue 裡放還沒用完的來源,輪流取一個,還有剩就放回尾端;可以直接推廣到 k 個