↓快轉到主要內容

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 個