演算法與資料結構速查表

共 137 份速查表,依「在 FAANG 軟體工程面試中實際出現的頻率」排序。照著 複習路徑 依序讀完最重要的那些,或依優先度、主題瀏覽。

複習路徑

59 份核心速查表,依學習順序排列 —— 先是 12 份基礎,接著是其餘必備,再來是高價值。重讀完一份的標星模板後就標記為已複習;一週後(高價值為兩週)會再次到期。

基礎12 份

閱讀階梯:每一份都是下一份的前提。

  1. LeetCode 模式指南優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

    入口:題目裡的訊號 → 模式 → 解它的那張 card。

    練習 14/27 ok · 11 again · 下一題: LC 206, LC 322, LC 347

  2. 複雜度速查表 — 經典演算法與資料結構優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

    每一輪面試都會被要求說出複雜度。

    尚無練習路徑

  3. 陣列優先度 5/5 — 必備 — 幾乎每一輪面試都會出現+ 例題

    原地改寫,以及「用索引當雜湊」的技巧。

    練習 4/15 ok · 3 again · 下一題: LC 88, LC 2657, LC 41

  4. Hash Map Cheatsheet(雜湊表速查)優先度 5/5 — 必備 — 幾乎每一輪面試都會出現+ 例題

    面試中使用率最高的單一資料結構。

    練習 5/16 ok · 4 again · 下一題: LC 347, LC 146, LC 438

  5. 雙指標優先度 5/5 — 必備 — 幾乎每一輪面試都會出現+ 例題

    陣列/字串上的相向指標與尾隨指標。

    練習 8/16 ok · 4 again · 下一題: LC 5, LC 647, LC 88

  6. 滑動視窗優先度 5/5 — 必備 — 幾乎每一輪面試都會出現+ 例題

    依條件擴張與收縮 — 自成一個題型家族。

    練習 5/14 ok · 4 again · 下一題: LC 438, LC 4067, LC 992

  7. 二分搜尋優先度 5/5 — 必備 — 幾乎每一輪面試都會出現+ 例題

    邊界模板,外加對答案做二分搜尋。

    練習 8/20 ok · 4 again · 下一題: LC 300, LC 35, LC 702

  8. 二元樹優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

    DFS 的狀態如何往下傳、又如何往上收。

    練習 13/20 ok · 5 again · 下一題: LC 572, LC 222, LC 652

  9. BFS(廣度優先搜尋)優先度 5/5 — 必備 — 幾乎每一輪面試都會出現+ 例題

    層序走訪,以及它為什麼能給出最短路徑。

    練習 4/13 ok · 3 again · 下一題: LC 542, LC 785, LC 752

  10. DFS(深度優先搜尋)優先度 5/5 — 必備 — 幾乎每一輪面試都會出現+ 例題

    每一道圖/樹題目都會重複用到的遞迴模式。

    練習 9/20 ok · 7 again · 下一題: LC 417, LC 124, LC 101

  11. 堆積與優先佇列優先度 5/5 — 必備 — 幾乎每一輪面試都會出現+ 例題

    Top-k 與「反覆取出最好的那個」這類問題。

    練習 5/18 ok · 6 again · 下一題: LC 347, LC 23, LC 703

  12. 動態規劃(DP)優先度 5/5 — 必備 — 幾乎每一輪面試都會出現+ 例題

    最大也最難的五星區塊 — 時間要留最多給它。

    練習 11/30 ok · 14 again · 下一題: LC 91, LC 139, LC 300

必備12 份

幾乎每一輪面試都會出現的其餘內容。

  1. 字串演算法與操作優先度 5/5 — 必備 — 幾乎每一輪面試都會出現+ 例題

    日常字串目錄 — 字元層級的雙指標掃描、頻率與 anagram 簽章、run-length 分組、切詞、解析與原地改寫 — 至於題解倉庫、語言層級的字串 API、回文、子字串搜尋與雙序列 DP,則各自有自己的一張表。

    練習 3/13 ok · 3 again · 下一題: LC 696, LC 388, LC 71

  2. 堆疊(Stack)優先度 5/5 — 必備 — 幾乎每一輪面試都會出現+ 例題

    LIFO 的基本功,加上堆疊的經典模板:括號配對、min-stack、單調堆疊的精簡版、用顯式堆疊做走訪,以及作用域/上下文帳本。

    練習 2/12 ok · 5 again · 下一題: LC 155, LC 232, LC 636

  3. Linked List(鏈結串列)優先度 5/5 — 必備 — 幾乎每一輪面試都會出現+ 例題

    單向與雙向鏈結串列的指標手術:反轉、合併、重排、虛擬頭節點技巧,以及環的處理。

    練習 4/23 ok · 10 again · 下一題: LC 206, LC 19, LC 143

  4. BST (Binary Search Tree)(二元搜尋樹)優先度 5/5 — 必備 — 幾乎每一輪面試都會出現+ 例題

    只談有序的樹 —— left < root < right 這條不變式換來了什麼(O(log n) 搜尋、中序即排序、依範圍剪枝、順序統計)。

    練習 4/12 ok · 5 again · 下一題: LC 230, LC 450, LC 669

  5. 樹狀資料結構 — 概念與模式優先度 5/5 — 必備 — 幾乎每一輪面試都會出現+ 例題

    樹的概念、樹的種類,以及走訪順序的策略 — 講的是為什麼與選哪個,再加上在這裡講解的進階技巧(Morris 穿線、倍增法,以及換根 DP,LC 834 的家)。各模式的二元樹模板放在 tree2.md。

    練習 4/10 ok · 2 again · 下一題: LC 297, LC 99, LC 114

  6. 樹的 LCA、距離與路徑問題優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

    最近共同祖先、節點間距離、父節點表(雙向)走訪,以及根到葉的路徑模板——所有答案是一條路徑或一個交會點、而不是某種形狀的樹問題。

    練習 8/14 ok · 5 again · 下一題: LC 124, LC 437, LC 1644

  7. 圖論演算法優先度 5/5 — 必備 — 幾乎每一輪面試都會出現+ 例題

    圖的表示法、走訪、連通性、環偵測,以及一般圖題的完整目錄。

    練習 9/18 ok · 3 again · 下一題: LC 269, LC 785, LC 721

  8. 對答案做二分搜尋優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

    針對一個候選答案的範圍,搭配單調的可行性判定式做二分搜尋 — canFinish / isValid 的寫法、「最小化最大值 vs 最大化最小值」的取捨、[max(nums), sum(nums)] 邊界配方,以及在值域上做計數的判定式。

    練習 3/14 ok · 5 again · 下一題: LC 1552, LC 378, LC 2616

  9. 0/1 背包 DP(0/1 Knapsack 中文詳解)優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

    用中文把 0/1 背包從「物品重量價值」一路講到 LC 494/416 的解題流程,重點放在狀態怎麼定義、「拿或不拿」的轉移、以及為什麼內層迴圈一定要倒序;完全背包(Unbounded)與排列/組合的迴圈順序規則不在這裡展開。

    尚無練習路徑

  10. 回溯(Backtracking)優先度 5/5 — 必備 — 幾乎每一輪面試都會出現+ 例題

    帶「復原」動作的系統性搜尋:choose/explore/un-choose 骨架、start_idx 的控制、跳過重複、剪枝,以及每個必會題型剛好一份的標準模板 — 大量的實作解答與 hard 級的帶狀態模板放在兩個衛星檔裡。

    練習 4/23 ok · 5 again · 下一題: LC 39, LC 17, LC 131

  11. 背包 DP(0/1、完全背包、Coin Change)優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

    完整的背包問題家族:0/1 vs 完全背包(unbounded)vs 有界背包(bounded)vs 分組背包(group)、子集合和(subset-sum)的化簡、為什麼 0/1 的內層迴圈要倒序,以及區分組合與排列的迴圈順序規則。

    練習 2/13 ok · 6 again · 下一題: LC 322, LC 416, LC 279

  12. Python 操作複雜度優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

    每一個 Python 內建與容器操作實際上要花多少成本,以及為什麼:內建函式、list、str、dict/set、tuple、deque、heapq、bisect 與 int 的逐項查表,每個成本背後的 CPython 記憶體排版,以及那七個會悄悄把 O(n) 解法變成 O(n²) 的寫法。

    尚無練習路徑

高價值35 份

常見到這裡有缺口就會掉關。

  1. Matrix Data Structure優先度 4/5 — 高價值 — 這裡有缺口就會掉關+ 例題

    把二維格子當成一個獨立主題來看 —— 走訪的幾何(螺旋、對角、旋轉、轉置)、原地標記,以及索引↔座標的換算。

    尚無練習路徑

  2. N Sum優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    專門講 k-sum 這個題型家族:從 2Sum 到 kSum、先排序再雙向收斂的遞迴寫法,以及重複值的處理。

    尚無練習路徑

  3. Palindrome (回文)優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    回文題型家族:中心擴散、雙指標驗證、回文 DP、Manacher,以及怎麼判斷一題該用哪一種。

    尚無練習路徑

  4. Prefix Sum (前綴和)優先度 4/5 — 高價值 — 這裡有缺口就會掉關+ 例題

    前綴和/累積和 — 子陣列和、二維前綴和、前綴和搭配雜湊表做計數。

    尚無練習路徑

  5. Collection(容器選擇)優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    跨容器的選型指南:什麼工作該用哪個 Java/Python 容器,以及各自的 API 陷阱。

    尚無練習路徑

  6. Queue 佇列優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    FIFO 的基本功:BFS 佇列、雙端佇列、環形緩衝區,以及以佇列為底的設計題。

    尚無練習路徑

  7. Stack — 運算式解析優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    用堆疊解運算式的題型家族:計算機三兄弟(LC 224 / 227 / 772)、decode-string 式的巢狀(LC 394),以及後綴/依序運算元求值(LC 150、682),還有讓運算子優先序自然浮現的 pre_op 延遲插入技巧。

    尚無練習路徑

  8. 單調堆疊資料結構優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    next greater/previous smaller/span/直方圖這類題目 — 堆疊本身保持有序,所以每個元素只被推入與彈出一次。

    尚無練習路徑

  9. Two pointers - Linkedlist(雙指標:鏈結串列)優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    走在鏈結串列節點上的雙指標:快慢指標找環、找中點、找倒數第 k 個、以及固定間距指標。不談陣列索引。

    尚無練習路徑

  10. 字典樹(Trie)優先度 4/5 — 高價值 — 這裡有缺口就會掉關+ 例題

    前綴樹 — insert/search/startsWith、節點該怎麼擺,以及那些「共用前綴」就是全部訣竅的題目(自動補完、單字搜尋、XOR trie)。

    尚無練習路徑

  11. 樹的序列化與字串編解碼優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    把樹變成字串、再變回來 — 用子樹指紋做身分辨識與重複偵測,以及完整的編碼/解碼家族(括號式、逗號加 null 標記、深度前綴)。

    尚無練習路徑

  12. 樹的建構優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    從扁平的東西把二元樹建起來:兩組走訪陣列、單一陣列上的索引區間,或是帶括號/中序的字串 — 也就是所有「只讀取樹」的題目的反方向。

    尚無練習路徑

  13. 樹的模式模板 — 索引與走訪變形優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    從每個樹的模式連到教它的那一張卡片的索引,再加上核心表單沒寫出來的幾種走訪:迭代的前序與後序、之字形層序、左下角的值,以及垂直順序。

    練習 0/8 ok · 下一題: LC 144, LC 145, LC 103

  14. Dijkstra’s Algorithm優先度 4/5 — 高價值 — 這裡有缺口就會掉關+ 例題

    用優先佇列解非負權重的單源最短路徑。

    尚無練習路徑

  15. Union Find(併查集)優先度 4/5 — 高價值 — 這裡有缺口就會掉關+ 例題

    併查集(disjoint set union)——無向圖的連通性、連通元件計數、環偵測,搭配路徑壓縮與按秩合併。

    尚無練習路徑

  16. 拓撲排序 - 完整指南優先度 4/5 — 高價值 — 這裡有缺口就會掉關+ 例題

    為 DAG 排序 — Kahn 的 BFS 解法、DFS 後序、環的偵測,以及建構在它們之上的排程類題目。

    尚無練習路徑

  17. Patience Sorting — 以 O(N log N) 求 LIS優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    O(N log N) 最長遞增子序列背後的紙牌遊戲演算法:牌堆、牌堆收斂成的 tails 陣列、如何還原子序列本身,以及可以歸約到它的題目家族。

    尚無練習路徑

  18. Quickselect(以分割求第 K 個元素)優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    以分割(partition)為基礎的選擇演算法:只保留 quicksort 分割後的其中一側,在平均 O(n) 時間內找出第 k 大、第 k 小或最接近的 k 個元素;也收它可用的各種分割方式,以及讓最壞情況變成線性的 median-of-medians pivot。LC 215 的 quickselect 解法以這裡為主場;堆積解法在 heap.md。

    練習 3/9 ok · 1 again · 下一題: LC 347, LC 1985, LC 1337

  19. 排序演算法與技巧優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    排序(sorting)演算法與周邊技巧 — 比較式排序與其穩定性、計數/桶/基數排序、quickselect、自訂比較器,以及循環排序(cyclic sort)。

    尚無練習路徑

  20. DP 模式總表優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    模板索引:每個經典 DP 模式各佔一小節(Kadane、LIS、MCM、LCS、背包、狀態機、格子、位元遮罩、數位、樹上 DP、正規表達式、加權區間排程、切分、記憶化 DAG)。

    尚無練習路徑

  21. DP 迴圈順序與相依性優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    為什麼自底向上 DP 的迴圈巢狀與方向是由它自己的轉移式所決定的、錯誤順序會失敗的四種方式,以及用五種順序實作 LC 139 Word Break——包括那個看起來正確、能通過 "leetcode"、卻悄悄在題目自己的 Example 2 上失敗的寫法。

    尚無練習路徑

  22. 字串 DP(雙序列網格模式)優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    在一或兩個字串上做的 DP:dp[m+1][n+1] 的雙序列網格、以前綴為基礎(1-indexed)的表格設計,以及 LCS、編輯距離、交錯字串、萬用字元/括號比對的完整範例。

    尚無練習路徑

  23. 從遞迴到動態規劃的轉換優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    一套機械化的流程:遞迴 → 記憶化(memoization) → 表格化(tabulation) → 空間最佳化,一次套用在一題上。

    尚無練習路徑

  24. 遞迴優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    把遞迴當成一種機制來談:base case、往下傳的狀態 vs 往上回傳的結果、呼叫堆疊的成本,以及怎麼改寫成迭代。使用遞迴的那些題型家族各自有專屬檔案。

    尚無練習路徑

  25. 區間(Intervals)優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    先排序再合併的區間題型 — 合併、插入、數重疊、最少刪除數。

    尚無練習路徑

  26. 貪婪演算法優先度 4/5 — 高價值 — 這裡有缺口就會掉關+ 例題

    每一步選當下最好的,以及證明這樣做安全的交換論證——區間排程、跳躍遊戲、任務分配——外加怎麼看出貪婪會失敗、必須改用 DP 的時機。

    尚無練習路徑

  27. 物件導向設計(OOD/Low-Level Design)優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    低階設計那一關 — 類別建模、SOLID,以及面試官真的會問的設計模式(strategy、observer、factory、state),附完整的設計範例。

    尚無練習路徑

  28. 系統設計題(Design)優先度 4/5 — 高價值 — 這裡有缺口就會掉關+ 例題

    LC 的「設計一個 X」題型:從題目讀出必須支援的操作,再挑出能讓每個操作都做到 O(1) 或 O(log n) 的結構組合;實際寫出來的設計放在 examples 那一頁。

    尚無練習路徑

  29. Java 字串與排序速查表優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    Java 的 String 與 StringBuilder 操作 — 與 char[] 互轉、切片、解析、組字串與修改 — 加上所有跟 comparator 有關的東西:陣列、集合與 map 的排序,以及決定順序的回傳值規則。

    尚無練習路徑

  30. Java 容器與陣列速查表優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    存放資料用的 Java 函式庫 API:陣列與二維陣列、list、map、佇列、堆積、堆疊與 pair — 每一種怎麼初始化、複製、走訪、索引,以及過程中的陷阱。

    尚無練習路徑

  31. Java 技巧與慣用寫法優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    決定「正確的演算法會不會算出正確答案」的那些 Java 語言語意:字元其實是整數、傳值與傳參考的差別,以及整數運算。函式庫 API 則放在另外兩份姊妹速查表。

    尚無練習路徑

  32. Python 技巧與慣用寫法優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    解題過程中會用到的 Python 語言慣用寫法 — 複製、字串處理、排序 key、整數運算、生成式(comprehension)與作用域 — 依「你想做什麼」來分組。標準函式庫、索引運算與各項操作的成本另有專屬速查表。

    尚無練習路徑

  33. Python 插入、切片與索引運算優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    Python 解法「邏輯明明對了卻答錯」的兩大元凶:插入到底落在哪一格,以及一段索引區間指的是「個數」還是「距離」。

    尚無練習路徑

  34. 面試用的 Python 標準函式庫優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    逐個函式庫的參考手冊:heapq、sortedcontainers、內建排序(sorted / list.sort)、bisect、collections、itertools、functools 與 datetime——每個呼叫、它們的複雜度,以及各自是為了取代哪一種手寫寫法而存在。

    尚無練習路徑

  35. 時間與空間複雜度 — 經典 LC 程式碼逐題解析優先度 4/5 — 高價值 — 這裡有缺口就會掉關

    逐題解析 — 怎麼替一份真實的 LC 解答論證複雜度,每個技巧配一道經典題。

    尚無練習路徑

依優先度

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現必備24 份

幾乎每一輪 FAANG 面試都會遇到 — 應該要能默寫出來。

LeetCode 模式指南

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

面試方法論

入口:從題目敘述走到解它的那張 card — 敘述裡的訊號、限制條件的提示、模式、指向那張 card 的連結,以及長得像、其實不是的那一題。這裡只做路由:每個模板都在表格連到的 card 裡。

練習 14/27 ok · 11 again · 下一題: LC 206, LC 322, LC 347

陣列

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

陣列與字串

陣列的基本功——原地改寫、旋轉、分割,以及「用索引當雜湊」的招式。它擁有這些操作本身;至於各個模式家族(視窗、指標、前綴和)各有自己的檔案。

練習 4/15 ok · 3 again · 下一題: LC 88, LC 2657, LC 41

雙指標

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

陣列與字串

陣列與字串上的雙指標家族:兩端向內收斂、快慢指標、從中心擴張、讀寫分離的原地重寫,每一種各給一個標準模板;依條件伸縮的視窗題不在這裡。

練習 8/16 ok · 4 again · 下一題: LC 5, LC 647, LC 88

滑動視窗

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

陣列與字串

依條件伸縮的視窗 — 固定大小、可變大小、至多 k 個,以及用相減湊出的恰好 k 個;擴張/收縮迴圈與七個標準視窗模板都歸這裡管。

練習 5/14 ok · 4 again · 下一題: LC 438, LC 4067, LC 992

二分搜尋

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

搜尋與排序

對單調搜尋空間做折半 — l <= r 與 l < r 背後的迴圈不變式推理、邊界(lower / upper bound)模板、旋轉陣列,以及浮點數與二維搜尋。

練習 8/20 ok · 4 again · 下一題: LC 300, LC 35, LC 702

二元樹

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

樹與堆積

二元樹特有的思路:DFS 的狀態往哪個方向流(往下還是往上),以及建立在這個基礎上的 11 個結構化模板。

練習 13/20 ok · 5 again · 下一題: LC 572, LC 222, LC 652

BFS(廣度優先搜尋)

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

圖論

BFS 的主要參考文件:佇列模板、逐層展開、格子與多源 BFS,以及為什麼在無權圖上「第一次拜訪」就等於最短路徑;較重的變形與大量解題範例則各自放在自己的文件裡。

練習 4/13 ok · 3 again · 下一題: LC 542, LC 785, LC 752

DFS(深度優先搜尋)

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

圖論

DFS 的主文件:十個核心的深度優先模板 — 樹走訪、網格填色(flood fill)、路徑搜尋、回溯、樹結構修改、後序彙總、邊界消除、形狀簽名與帶權邊走訪 — 並附上用來挑選模板的辨識表。

練習 9/20 ok · 7 again · 下一題: LC 417, LC 124, LC 101

堆積與優先佇列

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

樹與堆積

堆積(heap,這個資料結構)以及它所實作的優先佇列(priority queue,這個抽象資料型別),Python 與 Java 兩種語言。本檔案原本拆成 heap.md + priority_queue.md,兩邊把同樣的題目各解了一遍。

練習 5/18 ok · 6 again · 下一題: LC 347, LC 23, LC 703

動態規劃(DP)

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

動態規劃與遞迴

DP 的主文件 — 狀態設計、模式目錄,以及每個必會 DP 家族各一份標準模板;實作解法庫、冷門技巧,以及五個最重的子題目都各自獨立成篇,從這裡連過去。

練習 11/30 ok · 14 again · 下一題: LC 91, LC 139, LC 300

字串演算法與操作

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

陣列與字串

日常字串目錄 — 字元層級的雙指標掃描、頻率與 anagram 簽章、run-length 分組、切詞、解析與原地改寫 — 至於題解倉庫、語言層級的字串 API、回文、子字串搜尋與雙序列 DP,則各自有自己的一張表。

練習 3/13 ok · 3 again · 下一題: LC 696, LC 388, LC 71

堆疊(Stack)

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

雜湊、堆疊與佇列

LIFO 的基本功,加上堆疊的經典模板:括號配對、min-stack、單調堆疊的精簡版、用顯式堆疊做走訪,以及作用域/上下文帳本。

練習 2/12 ok · 5 again · 下一題: LC 155, LC 232, LC 636

Linked List(鏈結串列)

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

鏈結串列

單向與雙向鏈結串列的指標手術:反轉、合併、重排、虛擬頭節點技巧,以及環的處理。

練習 4/23 ok · 10 again · 下一題: LC 206, LC 19, LC 143

BST (Binary Search Tree)(二元搜尋樹)

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

樹與堆積

只談有序的樹 —— left < root < right 這條不變式換來了什麼(O(log n) 搜尋、中序即排序、依範圍剪枝、順序統計)。

練習 4/12 ok · 5 again · 下一題: LC 230, LC 450, LC 669

樹狀資料結構 — 概念與模式

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

樹與堆積

樹的概念、樹的種類,以及走訪順序的策略 — 講的是為什麼與選哪個,再加上在這裡講解的進階技巧(Morris 穿線、倍增法,以及換根 DP,LC 834 的家)。各模式的二元樹模板放在 tree2.md。

練習 4/10 ok · 2 again · 下一題: LC 297, LC 99, LC 114

樹的 LCA、距離與路徑問題

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

樹與堆積

最近共同祖先、節點間距離、父節點表(雙向)走訪,以及根到葉的路徑模板——所有答案是一條路徑或一個交會點、而不是某種形狀的樹問題。

練習 8/14 ok · 5 again · 下一題: LC 124, LC 437, LC 1644

圖論演算法

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

圖論

圖的表示法、走訪、連通性、環偵測,以及一般圖題的完整目錄。

練習 9/18 ok · 3 again · 下一題: LC 269, LC 785, LC 721

對答案做二分搜尋

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

搜尋與排序

針對一個候選答案的範圍,搭配單調的可行性判定式做二分搜尋 — canFinish / isValid 的寫法、「最小化最大值 vs 最大化最小值」的取捨、[max(nums), sum(nums)] 邊界配方,以及在值域上做計數的判定式。

練習 3/14 ok · 5 again · 下一題: LC 1552, LC 378, LC 2616

0/1 背包 DP(0/1 Knapsack 中文詳解)

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

動態規劃與遞迴

用中文把 0/1 背包從「物品重量價值」一路講到 LC 494/416 的解題流程,重點放在狀態怎麼定義、「拿或不拿」的轉移、以及為什麼內層迴圈一定要倒序;完全背包(Unbounded)與排列/組合的迴圈順序規則不在這裡展開。

回溯(Backtracking)

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

動態規劃與遞迴

帶「復原」動作的系統性搜尋:choose/explore/un-choose 骨架、start_idx 的控制、跳過重複、剪枝,以及每個必會題型剛好一份的標準模板 — 大量的實作解答與 hard 級的帶狀態模板放在兩個衛星檔裡。

練習 4/23 ok · 5 again · 下一題: LC 39, LC 17, LC 131

背包 DP(0/1、完全背包、Coin Change)

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

動態規劃與遞迴

完整的背包問題家族:0/1 vs 完全背包(unbounded)vs 有界背包(bounded)vs 分組背包(group)、子集合和(subset-sum)的化簡、為什麼 0/1 的內層迴圈要倒序,以及區分組合與排列的迴圈順序規則。

練習 2/13 ok · 6 again · 下一題: LC 322, LC 416, LC 279

Python 操作複雜度

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

語言工具箱

每一個 Python 內建與容器操作實際上要花多少成本,以及為什麼:內建函式、list、str、dict/set、tuple、deque、heapq、bisect 與 int 的逐項查表,每個成本背後的 CPython 記憶體排版,以及那七個會悄悄把 O(n) 解法變成 O(n²) 的寫法。

優先度 4/5 — 高價值 — 這裡有缺口就會掉關高價值55 份

出現頻率高到「這裡有缺口就會掉關」的程度。

Matrix — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

陣列與字串

matrix.md 背後的題解庫:十七道題,依各自吃的幾何性質或技巧分組 —— 走訪順序、原地變換、階梯搜尋、格子搜尋、二維 DP,以及列對壓縮。

Matrix Data Structure

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

陣列與字串

把二維格子當成一個獨立主題來看 —— 走訪的幾何(螺旋、對角、旋轉、轉置)、原地標記,以及索引↔座標的換算。

N Sum

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

陣列與字串

專門講 k-sum 這個題型家族:從 2Sum 到 kSum、先排序再雙向收斂的遞迴寫法,以及重複值的處理。

Palindrome (回文)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

陣列與字串

回文題型家族:中心擴散、雙指標驗證、回文 DP、Manacher,以及怎麼判斷一題該用哪一種。

Prefix Sum (前綴和)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

陣列與字串

前綴和/累積和 — 子陣列和、二維前綴和、前綴和搭配雜湊表做計數。

前綴和 — 進階模板

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

陣列與字串

六個需要借用其他結構或其他恆等式的前綴和模板:補集技巧、應付含負數陣列的單調雙端佇列、二維的列對壓縮、前綴 XOR、用雜湊表實作的稀疏差分陣列,以及樹上前綴和的計數表。

字串演算法 — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

陣列與字串

收錄不是模板錨點題的字串 LeetCode 實戰題,每題都寫成一張題目卡,歸檔到它所歸約的 string.md 模板底下;概念、模式卡與錨點題本身都留在主字串文件。

滑動視窗 — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

陣列與字串

不屬於任何模板錨定題的滑動視窗 LeetCode 實作題,每題一張題目卡,依它歸約到的主文件模板歸檔;模板、概念與決策表都留在滑動視窗主文件。

滑動視窗 — 進階視窗形態

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

陣列與字串

第一輪可以先跳過的滑動視窗技巧:至多 K 個相異的家族、帶禁用元素重置或一次掃描的恰好 K 計數、同時處理多個不重疊的視窗,以及以單字而非字元為鍵的視窗;七個必會模板留在主文件,而由別份文件負責的進階型態(雙端佇列求極值、補集視窗、數值分桶)在這裡只留指引。

陣列 — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

陣列與字串

array.md 自己那些模板(索引當雜湊、一次掃描的即時狀態)背後的題目,每題都放在它歸約到的卡片底下;歸屬在別份文件的陣列標籤題,在這裡只留一列指標。

雙指標 — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

陣列與字串

雙指標的 LeetCode 實作題庫,每題一份標準解,依它歸約到的雙指標主文件模板分組;概念、指標種類與模板本身留在雙指標主文件裡。

Collection(容器選擇)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

雜湊、堆疊與佇列

跨容器的選型指南:什麼工作該用哪個 Java/Python 容器,以及各自的 API 陷阱。

Queue 佇列

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

雜湊、堆疊與佇列

FIFO 的基本功:BFS 佇列、雙端佇列、環形緩衝區,以及以佇列為底的設計題。

Stack — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

雜湊、堆疊與佇列

stack.md 背後的題庫:不是任何模板錨點題的堆疊題,各自以題目卡的形式放在它所歸約到的模板底下;單調堆疊題在 monotonic_stack.md 裡完整解出,這裡只放指向它們的連結。

Stack — 運算式解析

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

雜湊、堆疊與佇列

用堆疊解運算式的題型家族:計算機三兄弟(LC 224 / 227 / 772)、decode-string 式的巢狀(LC 394),以及後綴/依序運算元求值(LC 150、682),還有讓運算子優先序自然浮現的 pre_op 延遲插入技巧。

單調堆疊資料結構

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

雜湊、堆疊與佇列

next greater/previous smaller/span/直方圖這類題目 — 堆疊本身保持有序,所以每個元素只被推入與彈出一次。

雜湊表 — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

雜湊、堆疊與佇列

雜湊表家族的經典 LC 題目,寫成題目卡,各自歸在它所歸約到的 hash_map.md 模板底下;本檔沒有自己的模板。

Two pointers - Linkedlist(雙指標:鏈結串列)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

鏈結串列

走在鏈結串列節點上的雙指標:快慢指標找環、找中點、找倒數第 k 個、以及固定間距指標。不談陣列索引。

鏈結串列 — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

鏈結串列

linked_list.md 背後的題目集:每題歸檔在它歸約到的核心模板之下,寫成一張題目卡,點出它多加的那一步;模板本身與各模板的錨點題都放在核心文件。

BST — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

樹與堆積

在 bst.md 某個模板上多加一步的 BST 題,每題以一張題目卡寫一次,放在它歸約到的那張卡底下;模板或進階卡已經寫出的題目,這裡只列指標、不重解。

BST — 進階模式與深入探討

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

樹與堆積

第一輪可以先跳過的 BST 內容:O(h) 空間的延遲式迭代器、用中序下降點找出被破壞的 BST、順序統計(rank)查詢,以及有序陣列以外的各種建構變形 —— 每一項都附上什麼時候用 bst.md 那張較簡單的卡就夠了。

堆積(Heap) — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

樹與堆積

堆積/優先佇列(priority queue)家族的題目集:每題都歸到它所化約成的 heap.md 模板之下,並寫出它額外多出的那一步;模板本身,以及需要進階技巧的題目,放在相鄰的文件裡。

字典樹(Trie)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

樹與堆積

前綴樹 — insert/search/startsWith、節點該怎麼擺,以及那些「共用前綴」就是全部訣竅的題目(自動補完、單字搜尋、XOR trie)。

樹的序列化與字串編解碼

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

樹與堆積

把樹變成字串、再變回來 — 用子樹指紋做身分辨識與重複偵測,以及完整的編碼/解碼家族(括號式、逗號加 null 標記、深度前綴)。

樹的建構

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

樹與堆積

從扁平的東西把二元樹建起來:兩組走訪陣列、單一陣列上的索引區間,或是帶括號/中序的字串 — 也就是所有「只讀取樹」的題目的反方向。

樹的模式模板 — 索引與走訪變形

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

樹與堆積

從每個樹的模式連到教它的那一張卡片的索引,再加上核心表單沒寫出來的幾種走訪:迭代的前序與後序、之字形層序、左下角的值,以及垂直順序。

練習 0/8 ok · 下一題: LC 144, LC 145, LC 103

進階堆積技巧

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

樹與堆積

第一輪複習可以先跳過的堆積模式:延遲刪除、掃描線的「存活」堆積、後悔貪婪、資源池配置器、格子圖上的最佳優先搜尋,以及二元堆積之外的結構;六個必背模板留在母文件裡。

Dijkstra — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

圖論

Dijkstra.md 背後的解題實作庫:十一題、兩種語言,依「搜尋狀態長什麼樣」分組,因為那正是決定你需要 dist[]、需要第二個狀態維度、還是一個單純 visited[] 的關鍵。

Dijkstra’s Algorithm

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

圖論

用優先佇列解非負權重的單源最短路徑。

Union Find(併查集)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

圖論

併查集(disjoint set union)——無向圖的連通性、連通元件計數、環偵測,搭配路徑壓縮與按秩合併。

拓撲排序 - 完整指南

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

圖論

為 DAG 排序 — Kahn 的 BFS 解法、DFS 後序、環的偵測,以及建構在它們之上的排程類題目。

拓撲排序 — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

圖論

topology_sorting.md 背後的題目集:每題一張 problem card,依照它歸約到的模板分組,本身不放任何模板或理論。

Patience Sorting — 以 O(N log N) 求 LIS

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

搜尋與排序

O(N log N) 最長遞增子序列背後的紙牌遊戲演算法:牌堆、牌堆收斂成的 tails 陣列、如何還原子序列本身,以及可以歸約到它的題目家族。

Quickselect(以分割求第 K 個元素)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

搜尋與排序

以分割(partition)為基礎的選擇演算法:只保留 quicksort 分割後的其中一側,在平均 O(n) 時間內找出第 k 大、第 k 小或最接近的 k 個元素;也收它可用的各種分割方式,以及讓最壞情況變成線性的 median-of-medians pivot。LC 215 的 quickselect 解法以這裡為主場;堆積解法在 heap.md。

練習 3/9 ok · 1 again · 下一題: LC 347, LC 1985, LC 1337

二分搜尋 — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

搜尋與排序

binary_search.md 的題組:每題歸檔在它所歸約的索引空間模板底下,寫成一張題目卡、一份標準解,另外收錄少數沒在 binary_search_on_answer.md 解過的答案空間題。

排序演算法與技巧

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

搜尋與排序

排序(sorting)演算法與周邊技巧 — 比較式排序與其穩定性、計數/桶/基數排序、quickselect、自訂比較器,以及循環排序(cyclic sort)。

DP 模式總表

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

動態規劃與遞迴

模板索引:每個經典 DP 模式各佔一小節(Kadane、LIS、MCM、LCS、背包、狀態機、格子、位元遮罩、數位、樹上 DP、正規表達式、加權區間排程、切分、記憶化 DAG)。

DP 迴圈順序與相依性

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

動態規劃與遞迴

為什麼自底向上 DP 的迴圈巢狀與方向是由它自己的轉移式所決定的、錯誤順序會失敗的四種方式,以及用五種順序實作 LC 139 Word Break——包括那個看起來正確、能通過 "leetcode"、卻悄悄在題目自己的 Example 2 上失敗的寫法。

DP 進階技巧

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

動態規劃與遞迴

DP 的附錄——第一輪該跳過的技巧:賽局理論/minimax DP、樹形與換根 DP、區間與字串 DP 的深入探討、機率與按步數計數的 DP、單調佇列與單調堆疊承載的 DP,以及從主表裁掉的長篇推導。

字串 DP(雙序列網格模式)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

動態規劃與遞迴

在一或兩個字串上做的 DP:dp[m+1][n+1] 的雙序列網格、以前綴為基礎(1-indexed)的表格設計,以及 LCS、編輯距離、交錯字串、萬用字元/括號比對的完整範例。

從遞迴到動態規劃的轉換

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

動態規劃與遞迴

一套機械化的流程:遞迴 → 記憶化(memoization) → 表格化(tabulation) → 空間最佳化,一次套用在一題上。

進階回溯

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

動態規劃與遞迴

需要在遞迴中額外攜帶狀態的困難級回溯 — 一個 Trie 節點、前一個運算元、一份刪除額度 — 再加上約束傳播、記憶化搜尋,以及第一輪學習應該直接跳過的通用切分模板;必背的基本形狀不會在這裡重複。

遞迴

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

動態規劃與遞迴

把遞迴當成一種機制來談:base case、往下傳的狀態 vs 往上回傳的結果、呼叫堆疊的成本,以及怎麼改寫成迭代。使用遞迴的那些題型家族各自有專屬檔案。

區間(Intervals)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

貪婪與區間

先排序再合併的區間題型 — 合併、插入、數重疊、最少刪除數。

貪婪演算法

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

貪婪與區間

每一步選當下最好的,以及證明這樣做安全的交換論證——區間排程、跳躍遊戲、任務分配——外加怎麼看出貪婪會失敗、必須改用 DP 的時機。

物件導向設計(OOD/Low-Level Design)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

設計與模擬

低階設計那一關 — 類別建模、SOLID,以及面試官真的會問的設計模式(strategy、observer、factory、state),附完整的設計範例。

系統設計題 — 實作範例

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

設計與模擬

design.md 背後的「設計一個 X」實作題,每題一張題目 card,依它逼出來的結構搭配(design.md 的模式)歸類。

系統設計題(Design)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

設計與模擬

LC 的「設計一個 X」題型:從題目讀出必須支援的操作,再挑出能讓每個操作都做到 O(1) 或 O(log n) 的結構組合;實際寫出來的設計放在 examples 那一頁。

Java 字串與排序速查表

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

語言工具箱

Java 的 String 與 StringBuilder 操作 — 與 char[] 互轉、切片、解析、組字串與修改 — 加上所有跟 comparator 有關的東西:陣列、集合與 map 的排序,以及決定順序的回傳值規則。

Java 容器與陣列速查表

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

語言工具箱

存放資料用的 Java 函式庫 API:陣列與二維陣列、list、map、佇列、堆積、堆疊與 pair — 每一種怎麼初始化、複製、走訪、索引,以及過程中的陷阱。

Java 技巧與慣用寫法

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

語言工具箱

決定「正確的演算法會不會算出正確答案」的那些 Java 語言語意:字元其實是整數、傳值與傳參考的差別,以及整數運算。函式庫 API 則放在另外兩份姊妹速查表。

Python 技巧與慣用寫法

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

語言工具箱

解題過程中會用到的 Python 語言慣用寫法 — 複製、字串處理、排序 key、整數運算、生成式(comprehension)與作用域 — 依「你想做什麼」來分組。標準函式庫、索引運算與各項操作的成本另有專屬速查表。

Python 插入、切片與索引運算

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

語言工具箱

Python 解法「邏輯明明對了卻答錯」的兩大元凶:插入到底落在哪一格,以及一段索引區間指的是「個數」還是「距離」。

面試用的 Python 標準函式庫

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

語言工具箱

逐個函式庫的參考手冊:heapq、sortedcontainers、內建排序(sorted / list.sort)、bisect、collections、itertools、functools 與 datetime——每個呼叫、它們的複雜度,以及各自是為了取代哪一種手寫寫法而存在。

優先度 3/5 — 值得會 — 多半是必備模式的變形值得會42 份

固定會出現,多半是五星模式的變形。

前綴和 — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

陣列與字串

prefix_sum.md 背後的解題存檔:八道模板無法從頭到尾解掉的題目,依照它們需要哪種前綴和形狀分組。

字串操作與語言 API

優先度 3/5 — 值得會 — 多半是必備模式的變形

陣列與字串

字串的語言層機制:Python 的切片與方法、Java 的 String 與 StringBuilder、字元分類與大小寫轉換、字元算術、split/join 的陷阱,以及建構字串的效能守則——不談使用它們的演算法。

字串比對(KMP、Rolling Hash)

優先度 3/5 — 值得會 — 多半是必備模式的變形

陣列與字串

只談子字串搜尋 — KMP 的失敗函數、Rabin-Karp rolling hash,以及「內建 indexOf vs KMP vs hash」該怎麼選。

差分陣列

優先度 3/5 — 值得會 — 多半是必備模式的變形

陣列與字串

O(1) 區間更新、O(n) 重建 — 前綴和的反操作。

把 xxx 加起來

優先度 3/5 — 值得會 — 多半是必備模式的變形

陣列與字串

逐位數相加,涵蓋面試官會丟給你的四種輸入形式:字串、整數、陣列、鏈結串列。

Set — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

雜湊、堆疊與佇列

set.md 背後的解法檔案庫:十四題,依「這個集合到底被拿來做什麼」分組 — 記住看過什麼、集合運算、用 O(1) 索引取代掃描,或是當成更大演算法裡的一個零件。

Set(集合)

優先度 3/5 — 值得會 — 多半是必備模式的變形

雜湊、堆疊與佇列

成員判斷、去重與集合運算 — 只需要知道元素「在不在」、不需要對應值的題目。

單調佇列(雙端佇列)

優先度 3/5 — 值得會 — 多半是必備模式的變形

雜湊、堆疊與佇列

用一個維持單調性的雙端佇列,以攤還 O(1) 的成本求滑動視窗的最大/最小值。

雜湊與計數

優先度 3/5 — 值得會 — 多半是必備模式的變形

雜湊、堆疊與佇列

雜湊的內部原理與計數慣用手法 — 雜湊函式設計、碰撞、頻率表、滾動雜湊、自訂鍵。

Trie — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

樹與堆積

trie.md 背後的題解倉庫:五道題,從把結構蓋出來,一路到在格子上搜尋——字典樹把「每個單字各走一次」壓成「只走一趟」。

堆積的語言 API — heapq 與 PriorityQueue

優先度 3/5 — 值得會 — 多半是必備模式的變形

樹與堆積

堆積在語言層面的機械細節:heapq 和 PriorityQueue 你會用到的每個呼叫、怎麼假造出最大堆積、怎麼在不 pop 的情況下偷看堆頂,以及「只有部分有序」的容器會帶來哪些陷阱;用到這些 API 的演算法本身,放在其他堆積的表單裡。

樹 — LeetCode 實戰範例

優先度 3/5 — 值得會 — 多半是必備模式的變形

樹與堆積

binary_tree.md 各模板的二元樹題目集:每題歸在它化約到的模板底下,只寫它多出來的那一步,模板本身不在這裡重講。

樹的回溯模板

優先度 3/5 — 值得會 — 多半是必備模式的變形

樹與堆積

樹的路徑問題背後那套「選擇 / 探索 / 復原」骨架,以及每題各自帶著的路徑狀態,外加根到葉卡片沒涵蓋的變形:通往單一節點的路徑(LC 236)、隱式的樹(LC 386、LC 388);根到葉的卡片本身放在 tree_lca_distance.md。

BFS — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

圖論

BFS 的題目集:每一題經典的逐層、多源、狀態空間與「把樹當成圖」的題目各一張 problem card,各自歸在它所歸約到的 bfs.md 模板之下 —— 這裡不教任何自己的模板。

BFS — 進階變形

優先度 3/5 — 值得會 — 多半是必備模式的變形

圖論

第一輪可以先跳過的 BFS 技巧:雙向 BFS、搭配 deque 的 0-1 BFS、超出標準模板的多源 BFS、在隱式或擴充狀態空間上的 BFS,以及列舉所有最短路徑的 DAG —— 必會的佇列模板留在主文件。

DFS — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

圖論

dfs.md 的題庫:它的模板能解的 DFS 題目,每題一張題目卡,歸在它所歸約到的模板底下;題目若在別份文件裡完整解過,這裡只留一列指標。

DFS — 進階模式

優先度 3/5 — 值得會 — 多半是必備模式的變形

圖論

第一輪複習可以先跳過的冷門 DFS 技巧:雙網格驗證、邊方向追蹤、跨連通分量的配對計數、字典樹配萬用字元搜尋、後序距離桶與 N 元樹彙總,以及以縮排或 parent[] 陣列形式給出的樹。真正的圖論(Tarjan、尤拉路徑)在 graph_advanced.md。

Minimum Spanning Tree(最小生成樹,MST)

優先度 3/5 — 值得會 — 多半是必備模式的變形

圖論

無向加權圖上的最小生成樹:切割性質、Kruskal 演算法(排序好的邊 + 併查集)與 Prim 演算法(heap 或稠密陣列),各自附逐步追蹤與變形,以及建立在它們之上的題型 — 完全幾何圖、虛擬源點、關鍵邊與瓶頸樹。

Shortest Path Algorithms — 什麼時候用哪一個

優先度 3/5 — 值得會 — 多半是必備模式的變形

圖論

只做選型判斷,也是最短路徑比較唯一的家 — 哪種題型該用哪個最短路徑演算法,以及直覺選法在哪裡會錯;Dijkstra.md、Bellman-Ford.md 和 Floyd-Warshall.md 不再各留一份比較表,而是指到這裡。不放完整實作。

併查集(Union Find) — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

圖論

union_find.md 背後的解題檔案庫:十七道題,依「一個節點代表什麼」分組——頂點、格子,或帶比值的變數——因為題目之間變的就只有這件事。

圖論實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

圖論

graph.md 的題目集:每題一張 problem card,依照它歸約到的 graph.md 模板分組,本身不放任何模板或理論。

快速比較:拓撲排序 vs Quick Union(併查集)

優先度 3/5 — 值得會 — 多半是必備模式的變形

圖論

只是一份決策文件 —— 拓撲排序 vs 併查集:各自回答什麼問題、直覺選錯的地方在哪,以及兩者都能解的題目。

進階圖論演算法

優先度 3/5 — 值得會 — 多半是必備模式的變形

圖論

第一輪面試準備可以先跳過的圖論技巧:Tarjan 的 low-link 家族(強連通分量、橋、關節點)、Euler 路徑與迴路,以及二分圖的延伸主題 — 奇偶併查集、最大匹配(以及它的最大流觀點)和貪婪 k-著色。

進階分治法

優先度 3/5 — 值得會 — 多半是必備模式的變形

搜尋與排序

合併排序以外的分治法 —— 那些「遞迴 + 合併」的形狀(邊排序邊計數、最近點對、矩陣分治、運算式分治)以及它們的遞迴式。

DP — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

動態規劃與遞迴

不是模板錨定題的經典 DP 題(LC 343、91、62、279、276、1137),每一題都是一張 problem card,歸檔在它所歸約到的 dp.md 模板底下,再加上一份「其他常見 DP 題在哪裡有完整解」的索引;本身不放模板也不談理論。

Kadane’s Algorithm(卡登演算法)

優先度 3/5 — 值得會 — 多半是必備模式的變形

動態規劃與遞迴

深入最大子陣列這個題型家族:Kadane 本體與它的各種變形(乘積、環狀、可刪除一個元素、二維)。

位元遮罩 DP(狀態壓縮)

優先度 3/5 — 值得會 — 多半是必備模式的變形

動態規劃與遞迴

狀態是「一個用整數編碼的子集合」的 DP:遮罩運算、子遮罩列舉、TSP 與指派問題的模板,以及 n <= 20 這條規模上限。

單調堆疊 + DP

優先度 3/5 — 值得會 — 多半是必備模式的變形

動態規劃與遞迴

單調堆疊上還掛著一個 DP 值的題型:「這個元素能撐過幾輪」、直方圖最大矩形那類面積 DP,以及最大正方形/計算正方形數量的網格遞迴式。

回溯 — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

動態規劃與遞迴

不是模板錨定題的那些回溯題(LC 17、784、996、93、140、980、22),每一題都是一張 problem card,歸檔在它所歸約到的 backtrack.md 模板底下;錨定題本身在那邊自己的 card 上解,這份不教任何自己的模板。

掃描線 — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

貪婪與區間

scanning_line.md 背後的完整解題檔案:六道題目,依「掃描究竟在數什麼」分組 — 重疊深度、加權總和、存活工作的堆積,或兩個有序清單的交集。

掃描線(Line Sweep)演算法

優先度 3/5 — 值得會 — 多半是必備模式的變形

貪婪與區間

掃描線:把每個區間轉成 +1 / -1 事件,依座標排序,掃過一次。

貪婪 — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

貪婪與區間

greedy.md 背後的題解倉庫:十四題,依貪婪選擇的形狀分組 — 往前延伸可達範圍、累積後歸零、依頻率交錯、排序後取走,或邊掃邊定案。

Segment Tree & Binary Indexed Tree (Fenwick Tree)

優先度 3/5 — 值得會 — 多半是必備模式的變形

區間查詢與進階結構

支援區間查詢+區間更新的結構 —— 線段樹(segment tree)、懶惰標記(lazy propagation),以及 BIT vs 線段樹 vs 合併排序該怎麼選。

樹狀陣列(Binary Indexed Tree / Fenwick Tree)

優先度 3/5 — 值得會 — 多半是必備模式的變形

區間查詢與進階結構

專講 Fenwick 樹:i & -i 的索引運算、單點更新 + 前綴查詢,以及用它最俐落的那些題目。

Bit Manipulation — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

數學與位元運算

bit_manipulation.md 背後的題解檔案庫:十九題,依照它們吃到位元運算子的哪個性質分組 —— XOR 把成對元素抵銷、清掉最低的 set bit、不用進位的算術、用一個整數代表一個子集合,或是親手打造遮罩來改寫一段位元欄位。

位元運算

優先度 3/5 — 值得會 — 多半是必備模式的變形

數學與位元運算

整數在位元層次上是怎麼被表示的(二補數、固定位寬、位移),以及建立在其上的各種運算與技巧:遮罩、XOR 恆等式、最低位 1、子集列舉,還有 bitmask DP。

數學

優先度 3/5 — 值得會 — 多半是必備模式的變形

數學與位元運算

面試中的數值操作 — 取位數、避免溢位的算術、進位轉換、開根號與次方。公式層級的計數則在隔壁那份。

Iterator(迭代器)

優先度 3/5 — 值得會 — 多半是必備模式的變形

設計與模擬

迭代器契約:hasNext/next 搭配延遲狀態、攤平、預看與合併,單一觀念獨立成篇。

系統設計類的實作模式

優先度 3/5 — 值得會 — 多半是必備模式的變形

設計與模擬

那些會被當成「寫程式題」來考的分散式系統模式:一致性雜湊、token bucket 與 leaky bucket 限流、以及各種負載平衡演算法,附上可直接跑的實作,以及面試官一定會追問的取捨。

Python 陷阱與並行處理

優先度 3/5 — 值得會 — 多半是必備模式的變形

語言工具箱

那些會悄悄害你 submission 掛掉的 Python 行為:可變預設參數、closure 的延遲綁定、整數快取、複製語意,再加上 GIL 與 Python 的並行處理全貌。

複雜度分析練習題

優先度 3/5 — 值得會 — 多半是必備模式的變形

面試方法論

20 道自我測驗題 — 讀程式片段、說出複雜度、再對答案檢查自己。

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問冷門16 份

面試少見 — 讀過一次即可,除非目標公司已知會問。

進階字串演算法

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

陣列與字串

比較重的字串工具:後綴結構、Z-algorithm、Manacher,以及字串 DP — 這些對主字串文件來說太專門的部分。

Priority Queue (PQ)(優先佇列)

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

樹與堆積

僅作轉址。 本檔已併入 heap.md,留著只是為了把舊連結導向正確的章節。

轉址

Bellman-Ford Algorithm

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

圖論

容得下負權重、而且能偵測負環的單源最短路徑演算法,另外還有限制跳數(k hop)的變形。

Floyd-Warshall Algorithm

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

圖論

用「中繼頂點」做 DP 求全點對最短路徑 — O(V³)、稠密圖、遞移閉包。

QuickSelect(已移到 quickselect.md)

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

搜尋與排序

僅作轉址。 這份文件在 2026 年 11 月改名為 quickselect.md,留著只是為了把舊連結導向正確的章節。

轉址

數位 DP(在限制下數數字)

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

動態規劃與遞迴

數出某個區間內有多少數字滿足「逐位」的性質:tight/started/位置這組狀態、通用的 top-down 模板,以及 count(R) - count(L-1) 這個區間技巧。

MyCalendar 中重疊判定邏輯的解說

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

貪婪與區間

只講一件事 — 區間重疊的判定式:閉區間 [a,b] vs 半開區間 [a,b),以及每一題 LC 各需要哪一種。

區間重疊(已移到 array_overlap_explanation.md)

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

貪婪與區間

僅作轉址。 這份文件在 2026 年 11 月改名為 array_overlap_explanation.md,修正拼錯的檔名;留著只是為了把舊連結導向正確的章節。

轉址

串流演算法

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

區間查詢與進階結構

被限制在單趟掃描與次線性記憶體之下的演算法 —— 蓄水池抽樣、Boyer-Moore 多數投票、加權隨機挑選,以及近似計數。

記憶體上限下的演算法

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

區間查詢與進階結構

輸入放不進 RAM 時該怎麼做:位元向量、先分桶再細化的多趟掃描、依雜湊切分檔案,以及外部合併排序——這些技巧以多掃幾趟為代價,仍能回傳精確答案。

數學與邏輯謎題

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

數學與位元運算

解腦筋急轉彎類題目的四個招式:計算一次測試能買到多少資訊、平衡最壞情況、找出不變量,以及運用期望值的線性性。本篇教的是招式,而不是謎題清單。

組合數學與數學模式

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

數學與位元運算

面試會考到的計數與數論:模運算、GCD/LCM、篩法、nCr、蓄水池抽樣,以及基本幾何。

並行處理模式(Java)

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

設計與模擬

L4 以上會出現的少數幾題 Java 並行題:依序列印、生產者/消費者、讀寫協調與死結避免,以及它們會用到的同步原語。

進階模擬

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

設計與模擬

那種「答案就是忠實地一步步跑完」的題目:狀態機、機器人/格子上的行走、遊戲回合、迭代改寫,外加怎麼讓這種程式碼不要爆長。

LC 題型分類索引(wisdompeak)

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

面試方法論

指向 wisdompeak 的題目分類表,並把它的 29 個分類對應到本 repo 中負責教它的那份 cheatsheet。分類表本身不在這裡複製一份。

轉址

程式面試流程

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

面試方法論

轉址頁。原本的六步面試流程已經搬進 lc_pattern.md,那才是你開始解題時真正會打開的那一頁。

轉址

依主題

陣列與字串21 份

面試中出現頻率最高的一塊。先把這裡的四大模式家族練熟,再談其他。

字串演算法與操作

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

日常字串目錄 — 字元層級的雙指標掃描、頻率與 anagram 簽章、run-length 分組、切詞、解析與原地改寫 — 至於題解倉庫、語言層級的字串 API、回文、子字串搜尋與雙序列 DP,則各自有自己的一張表。

練習 3/13 ok · 3 again · 下一題: LC 696, LC 388, LC 71

滑動視窗

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

依條件伸縮的視窗 — 固定大小、可變大小、至多 k 個,以及用相減湊出的恰好 k 個;擴張/收縮迴圈與七個標準視窗模板都歸這裡管。

練習 5/14 ok · 4 again · 下一題: LC 438, LC 4067, LC 992

陣列

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

陣列的基本功——原地改寫、旋轉、分割,以及「用索引當雜湊」的招式。它擁有這些操作本身;至於各個模式家族(視窗、指標、前綴和)各有自己的檔案。

練習 4/15 ok · 3 again · 下一題: LC 88, LC 2657, LC 41

雙指標

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

陣列與字串上的雙指標家族:兩端向內收斂、快慢指標、從中心擴張、讀寫分離的原地重寫,每一種各給一個標準模板;依條件伸縮的視窗題不在這裡。

練習 8/16 ok · 4 again · 下一題: LC 5, LC 647, LC 88

Matrix — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

matrix.md 背後的題解庫:十七道題,依各自吃的幾何性質或技巧分組 —— 走訪順序、原地變換、階梯搜尋、格子搜尋、二維 DP,以及列對壓縮。

Matrix Data Structure

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

把二維格子當成一個獨立主題來看 —— 走訪的幾何(螺旋、對角、旋轉、轉置)、原地標記,以及索引↔座標的換算。

N Sum

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

專門講 k-sum 這個題型家族:從 2Sum 到 kSum、先排序再雙向收斂的遞迴寫法,以及重複值的處理。

Palindrome (回文)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

回文題型家族:中心擴散、雙指標驗證、回文 DP、Manacher,以及怎麼判斷一題該用哪一種。

Prefix Sum (前綴和)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

前綴和/累積和 — 子陣列和、二維前綴和、前綴和搭配雜湊表做計數。

前綴和 — 進階模板

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

六個需要借用其他結構或其他恆等式的前綴和模板:補集技巧、應付含負數陣列的單調雙端佇列、二維的列對壓縮、前綴 XOR、用雜湊表實作的稀疏差分陣列,以及樹上前綴和的計數表。

字串演算法 — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

收錄不是模板錨點題的字串 LeetCode 實戰題,每題都寫成一張題目卡,歸檔到它所歸約的 string.md 模板底下;概念、模式卡與錨點題本身都留在主字串文件。

滑動視窗 — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

不屬於任何模板錨定題的滑動視窗 LeetCode 實作題,每題一張題目卡,依它歸約到的主文件模板歸檔;模板、概念與決策表都留在滑動視窗主文件。

滑動視窗 — 進階視窗形態

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

第一輪可以先跳過的滑動視窗技巧:至多 K 個相異的家族、帶禁用元素重置或一次掃描的恰好 K 計數、同時處理多個不重疊的視窗,以及以單字而非字元為鍵的視窗;七個必會模板留在主文件,而由別份文件負責的進階型態(雙端佇列求極值、補集視窗、數值分桶)在這裡只留指引。

陣列 — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

array.md 自己那些模板(索引當雜湊、一次掃描的即時狀態)背後的題目,每題都放在它歸約到的卡片底下;歸屬在別份文件的陣列標籤題,在這裡只留一列指標。

雙指標 — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

雙指標的 LeetCode 實作題庫,每題一份標準解,依它歸約到的雙指標主文件模板分組;概念、指標種類與模板本身留在雙指標主文件裡。

前綴和 — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

prefix_sum.md 背後的解題存檔:八道模板無法從頭到尾解掉的題目,依照它們需要哪種前綴和形狀分組。

字串操作與語言 API

優先度 3/5 — 值得會 — 多半是必備模式的變形

字串的語言層機制:Python 的切片與方法、Java 的 String 與 StringBuilder、字元分類與大小寫轉換、字元算術、split/join 的陷阱,以及建構字串的效能守則——不談使用它們的演算法。

字串比對(KMP、Rolling Hash)

優先度 3/5 — 值得會 — 多半是必備模式的變形

只談子字串搜尋 — KMP 的失敗函數、Rabin-Karp rolling hash,以及「內建 indexOf vs KMP vs hash」該怎麼選。

差分陣列

優先度 3/5 — 值得會 — 多半是必備模式的變形

O(1) 區間更新、O(n) 重建 — 前綴和的反操作。

把 xxx 加起來

優先度 3/5 — 值得會 — 多半是必備模式的變形

逐位數相加,涵蓋面試官會丟給你的四種輸入形式:字串、整數、陣列、鏈結串列。

進階字串演算法

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

比較重的字串工具:後綴結構、Z-algorithm、Manacher,以及字串 DP — 這些對主字串文件來說太專門的部分。

雜湊、堆疊與佇列12 份

O(1) 查找加上 LIFO/FIFO 的紀律 — 把 O(n^2) 掃描壓成 O(n) 的那組結構。

堆疊(Stack)

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

LIFO 的基本功,加上堆疊的經典模板:括號配對、min-stack、單調堆疊的精簡版、用顯式堆疊做走訪,以及作用域/上下文帳本。

練習 2/12 ok · 5 again · 下一題: LC 155, LC 232, LC 636

Collection(容器選擇)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

跨容器的選型指南:什麼工作該用哪個 Java/Python 容器,以及各自的 API 陷阱。

Queue 佇列

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

FIFO 的基本功:BFS 佇列、雙端佇列、環形緩衝區,以及以佇列為底的設計題。

Stack — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

stack.md 背後的題庫:不是任何模板錨點題的堆疊題,各自以題目卡的形式放在它所歸約到的模板底下;單調堆疊題在 monotonic_stack.md 裡完整解出,這裡只放指向它們的連結。

Stack — 運算式解析

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

用堆疊解運算式的題型家族:計算機三兄弟(LC 224 / 227 / 772)、decode-string 式的巢狀(LC 394),以及後綴/依序運算元求值(LC 150、682),還有讓運算子優先序自然浮現的 pre_op 延遲插入技巧。

單調堆疊資料結構

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

next greater/previous smaller/span/直方圖這類題目 — 堆疊本身保持有序,所以每個元素只被推入與彈出一次。

雜湊表 — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

雜湊表家族的經典 LC 題目,寫成題目卡,各自歸在它所歸約到的 hash_map.md 模板底下;本檔沒有自己的模板。

Set — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

set.md 背後的解法檔案庫:十四題,依「這個集合到底被拿來做什麼」分組 — 記住看過什麼、集合運算、用 O(1) 索引取代掃描,或是當成更大演算法裡的一個零件。

Set(集合)

優先度 3/5 — 值得會 — 多半是必備模式的變形

成員判斷、去重與集合運算 — 只需要知道元素「在不在」、不需要對應值的題目。

單調佇列(雙端佇列)

優先度 3/5 — 值得會 — 多半是必備模式的變形

用一個維持單調性的雙端佇列,以攤還 O(1) 的成本求滑動視窗的最大/最小值。

雜湊與計數

優先度 3/5 — 值得會 — 多半是必備模式的變形

雜湊的內部原理與計數慣用手法 — 雜湊函式設計、碰撞、頻率表、滾動雜湊、自訂鍵。

鏈結串列3 份

指標手術。概念不深,但對實作精準度的要求很高。

Linked List(鏈結串列)

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

單向與雙向鏈結串列的指標手術:反轉、合併、重排、虛擬頭節點技巧,以及環的處理。

練習 4/23 ok · 10 again · 下一題: LC 206, LC 19, LC 143

Two pointers - Linkedlist(雙指標:鏈結串列)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

走在鏈結串列節點上的雙指標:快慢指標找環、找中點、找倒數第 k 個、以及固定間距指標。不談陣列索引。

鏈結串列 — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

linked_list.md 背後的題目集:每題歸檔在它歸約到的核心模板之下,寫成一張題目卡,點出它多加的那一步;模板本身與各模板的錨點題都放在核心文件。

樹與堆積18 份

遞迴結構加上有序存取。所有標記為樹/堆積的面試題,大約四分之一出自這五份文件。

BST (Binary Search Tree)(二元搜尋樹)

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

只談有序的樹 —— left < root < right 這條不變式換來了什麼(O(log n) 搜尋、中序即排序、依範圍剪枝、順序統計)。

練習 4/12 ok · 5 again · 下一題: LC 230, LC 450, LC 669

二元樹

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

二元樹特有的思路:DFS 的狀態往哪個方向流(往下還是往上),以及建立在這個基礎上的 11 個結構化模板。

練習 13/20 ok · 5 again · 下一題: LC 572, LC 222, LC 652

堆積與優先佇列

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

堆積(heap,這個資料結構)以及它所實作的優先佇列(priority queue,這個抽象資料型別),Python 與 Java 兩種語言。本檔案原本拆成 heap.md + priority_queue.md,兩邊把同樣的題目各解了一遍。

練習 5/18 ok · 6 again · 下一題: LC 347, LC 23, LC 703

樹狀資料結構 — 概念與模式

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

樹的概念、樹的種類,以及走訪順序的策略 — 講的是為什麼與選哪個,再加上在這裡講解的進階技巧(Morris 穿線、倍增法,以及換根 DP,LC 834 的家)。各模式的二元樹模板放在 tree2.md。

練習 4/10 ok · 2 again · 下一題: LC 297, LC 99, LC 114

樹的 LCA、距離與路徑問題

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

最近共同祖先、節點間距離、父節點表(雙向)走訪,以及根到葉的路徑模板——所有答案是一條路徑或一個交會點、而不是某種形狀的樹問題。

練習 8/14 ok · 5 again · 下一題: LC 124, LC 437, LC 1644

BST — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

在 bst.md 某個模板上多加一步的 BST 題,每題以一張題目卡寫一次,放在它歸約到的那張卡底下;模板或進階卡已經寫出的題目,這裡只列指標、不重解。

BST — 進階模式與深入探討

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

第一輪可以先跳過的 BST 內容:O(h) 空間的延遲式迭代器、用中序下降點找出被破壞的 BST、順序統計(rank)查詢,以及有序陣列以外的各種建構變形 —— 每一項都附上什麼時候用 bst.md 那張較簡單的卡就夠了。

堆積(Heap) — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

堆積/優先佇列(priority queue)家族的題目集:每題都歸到它所化約成的 heap.md 模板之下,並寫出它額外多出的那一步;模板本身,以及需要進階技巧的題目,放在相鄰的文件裡。

字典樹(Trie)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

前綴樹 — insert/search/startsWith、節點該怎麼擺,以及那些「共用前綴」就是全部訣竅的題目(自動補完、單字搜尋、XOR trie)。

樹的序列化與字串編解碼

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

把樹變成字串、再變回來 — 用子樹指紋做身分辨識與重複偵測,以及完整的編碼/解碼家族(括號式、逗號加 null 標記、深度前綴)。

樹的建構

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

從扁平的東西把二元樹建起來:兩組走訪陣列、單一陣列上的索引區間,或是帶括號/中序的字串 — 也就是所有「只讀取樹」的題目的反方向。

樹的模式模板 — 索引與走訪變形

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

從每個樹的模式連到教它的那一張卡片的索引,再加上核心表單沒寫出來的幾種走訪:迭代的前序與後序、之字形層序、左下角的值,以及垂直順序。

練習 0/8 ok · 下一題: LC 144, LC 145, LC 103

進階堆積技巧

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

第一輪複習可以先跳過的堆積模式:延遲刪除、掃描線的「存活」堆積、後悔貪婪、資源池配置器、格子圖上的最佳優先搜尋,以及二元堆積之外的結構;六個必背模板留在母文件裡。

Trie — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

trie.md 背後的題解倉庫:五道題,從把結構蓋出來,一路到在格子上搜尋——字典樹把「每個單字各走一次」壓成「只走一趟」。

堆積的語言 API — heapq 與 PriorityQueue

優先度 3/5 — 值得會 — 多半是必備模式的變形

堆積在語言層面的機械細節:heapq 和 PriorityQueue 你會用到的每個呼叫、怎麼假造出最大堆積、怎麼在不 pop 的情況下偷看堆頂,以及「只有部分有序」的容器會帶來哪些陷阱;用到這些 API 的演算法本身,放在其他堆積的表單裡。

樹 — LeetCode 實戰範例

優先度 3/5 — 值得會 — 多半是必備模式的變形

binary_tree.md 各模板的二元樹題目集:每題歸在它化約到的模板底下,只寫它多出來的那一步,模板本身不在這裡重講。

樹的回溯模板

優先度 3/5 — 值得會 — 多半是必備模式的變形

樹的路徑問題背後那套「選擇 / 探索 / 復原」骨架,以及每題各自帶著的路徑狀態,外加根到葉卡片沒涵蓋的變形:通往單一節點的路徑(LC 236)、隱式的樹(LC 386、LC 388);根到葉的卡片本身放在 tree_lca_distance.md。

Priority Queue (PQ)(優先佇列)

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

僅作轉址。 本檔已併入 heap.md,留著只是為了把舊連結導向正確的章節。

轉址

圖論20 份

走訪、連通性與排序。BFS/DFS 是必備;帶權最短路徑三本柱多半是 L5 以上才會碰。

BFS(廣度優先搜尋)

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

BFS 的主要參考文件:佇列模板、逐層展開、格子與多源 BFS,以及為什麼在無權圖上「第一次拜訪」就等於最短路徑;較重的變形與大量解題範例則各自放在自己的文件裡。

練習 4/13 ok · 3 again · 下一題: LC 542, LC 785, LC 752

DFS(深度優先搜尋)

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

DFS 的主文件:十個核心的深度優先模板 — 樹走訪、網格填色(flood fill)、路徑搜尋、回溯、樹結構修改、後序彙總、邊界消除、形狀簽名與帶權邊走訪 — 並附上用來挑選模板的辨識表。

練習 9/20 ok · 7 again · 下一題: LC 417, LC 124, LC 101

圖論演算法

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

圖的表示法、走訪、連通性、環偵測,以及一般圖題的完整目錄。

練習 9/18 ok · 3 again · 下一題: LC 269, LC 785, LC 721

Dijkstra — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

Dijkstra.md 背後的解題實作庫:十一題、兩種語言,依「搜尋狀態長什麼樣」分組,因為那正是決定你需要 dist[]、需要第二個狀態維度、還是一個單純 visited[] 的關鍵。

Dijkstra’s Algorithm

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

用優先佇列解非負權重的單源最短路徑。

Union Find(併查集)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

併查集(disjoint set union)——無向圖的連通性、連通元件計數、環偵測,搭配路徑壓縮與按秩合併。

拓撲排序 - 完整指南

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

為 DAG 排序 — Kahn 的 BFS 解法、DFS 後序、環的偵測,以及建構在它們之上的排程類題目。

拓撲排序 — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

topology_sorting.md 背後的題目集:每題一張 problem card,依照它歸約到的模板分組,本身不放任何模板或理論。

BFS — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

BFS 的題目集:每一題經典的逐層、多源、狀態空間與「把樹當成圖」的題目各一張 problem card,各自歸在它所歸約到的 bfs.md 模板之下 —— 這裡不教任何自己的模板。

BFS — 進階變形

優先度 3/5 — 值得會 — 多半是必備模式的變形

第一輪可以先跳過的 BFS 技巧:雙向 BFS、搭配 deque 的 0-1 BFS、超出標準模板的多源 BFS、在隱式或擴充狀態空間上的 BFS,以及列舉所有最短路徑的 DAG —— 必會的佇列模板留在主文件。

DFS — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

dfs.md 的題庫:它的模板能解的 DFS 題目,每題一張題目卡,歸在它所歸約到的模板底下;題目若在別份文件裡完整解過,這裡只留一列指標。

DFS — 進階模式

優先度 3/5 — 值得會 — 多半是必備模式的變形

第一輪複習可以先跳過的冷門 DFS 技巧:雙網格驗證、邊方向追蹤、跨連通分量的配對計數、字典樹配萬用字元搜尋、後序距離桶與 N 元樹彙總,以及以縮排或 parent[] 陣列形式給出的樹。真正的圖論(Tarjan、尤拉路徑)在 graph_advanced.md。

Minimum Spanning Tree(最小生成樹,MST)

優先度 3/5 — 值得會 — 多半是必備模式的變形

無向加權圖上的最小生成樹:切割性質、Kruskal 演算法(排序好的邊 + 併查集)與 Prim 演算法(heap 或稠密陣列),各自附逐步追蹤與變形,以及建立在它們之上的題型 — 完全幾何圖、虛擬源點、關鍵邊與瓶頸樹。

Shortest Path Algorithms — 什麼時候用哪一個

優先度 3/5 — 值得會 — 多半是必備模式的變形

只做選型判斷,也是最短路徑比較唯一的家 — 哪種題型該用哪個最短路徑演算法,以及直覺選法在哪裡會錯;Dijkstra.md、Bellman-Ford.md 和 Floyd-Warshall.md 不再各留一份比較表,而是指到這裡。不放完整實作。

併查集(Union Find) — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

union_find.md 背後的解題檔案庫:十七道題,依「一個節點代表什麼」分組——頂點、格子,或帶比值的變數——因為題目之間變的就只有這件事。

圖論實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

graph.md 的題目集:每題一張 problem card,依照它歸約到的 graph.md 模板分組,本身不放任何模板或理論。

快速比較:拓撲排序 vs Quick Union(併查集)

優先度 3/5 — 值得會 — 多半是必備模式的變形

只是一份決策文件 —— 拓撲排序 vs 併查集:各自回答什麼問題、直覺選錯的地方在哪,以及兩者都能解的題目。

進階圖論演算法

優先度 3/5 — 值得會 — 多半是必備模式的變形

第一輪面試準備可以先跳過的圖論技巧:Tarjan 的 low-link 家族(強連通分量、橋、關節點)、Euler 路徑與迴路,以及二分圖的延伸主題 — 奇偶併查集、最大匹配(以及它的最大流觀點)和貪婪 k-著色。

Bellman-Ford Algorithm

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

容得下負權重、而且能偵測負環的單源最短路徑演算法,另外還有限制跳數(k hop)的變形。

Floyd-Warshall Algorithm

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

用「中繼頂點」做 DP 求全點對最短路徑 — O(V³)、稠密圖、遞移閉包。

搜尋與排序8 份

把單調空間對半砍,以及排序究竟買到了什麼。「對答案做二分搜尋」是最被低估的五星技巧。

二分搜尋

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

對單調搜尋空間做折半 — l <= r 與 l < r 背後的迴圈不變式推理、邊界(lower / upper bound)模板、旋轉陣列,以及浮點數與二維搜尋。

練習 8/20 ok · 4 again · 下一題: LC 300, LC 35, LC 702

對答案做二分搜尋

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

針對一個候選答案的範圍,搭配單調的可行性判定式做二分搜尋 — canFinish / isValid 的寫法、「最小化最大值 vs 最大化最小值」的取捨、[max(nums), sum(nums)] 邊界配方,以及在值域上做計數的判定式。

練習 3/14 ok · 5 again · 下一題: LC 1552, LC 378, LC 2616

Patience Sorting — 以 O(N log N) 求 LIS

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

O(N log N) 最長遞增子序列背後的紙牌遊戲演算法:牌堆、牌堆收斂成的 tails 陣列、如何還原子序列本身,以及可以歸約到它的題目家族。

Quickselect(以分割求第 K 個元素)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

以分割(partition)為基礎的選擇演算法:只保留 quicksort 分割後的其中一側,在平均 O(n) 時間內找出第 k 大、第 k 小或最接近的 k 個元素;也收它可用的各種分割方式,以及讓最壞情況變成線性的 median-of-medians pivot。LC 215 的 quickselect 解法以這裡為主場;堆積解法在 heap.md。

練習 3/9 ok · 1 again · 下一題: LC 347, LC 1985, LC 1337

二分搜尋 — 實戰題解

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

binary_search.md 的題組:每題歸檔在它所歸約的索引空間模板底下,寫成一張題目卡、一份標準解,另外收錄少數沒在 binary_search_on_answer.md 解過的答案空間題。

排序演算法與技巧

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

排序(sorting)演算法與周邊技巧 — 比較式排序與其穩定性、計數/桶/基數排序、quickselect、自訂比較器,以及循環排序(cyclic sort)。

進階分治法

優先度 3/5 — 值得會 — 多半是必備模式的變形

合併排序以外的分治法 —— 那些「遞迴 + 合併」的形狀(邊排序邊計數、最近點對、矩陣分治、運算式分治)以及它們的遞迴式。

QuickSelect(已移到 quickselect.md)

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

僅作轉址。 這份文件在 2026 年 11 月改名為 quickselect.md,留著只是為了把舊連結導向正確的章節。

轉址

動態規劃與遞迴18 份

最硬的五星區塊。從遞迴出發,先記憶化,再改成表格。

0/1 背包 DP(0/1 Knapsack 中文詳解)

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

用中文把 0/1 背包從「物品重量價值」一路講到 LC 494/416 的解題流程,重點放在狀態怎麼定義、「拿或不拿」的轉移、以及為什麼內層迴圈一定要倒序;完全背包(Unbounded)與排列/組合的迴圈順序規則不在這裡展開。

動態規劃(DP)

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

DP 的主文件 — 狀態設計、模式目錄,以及每個必會 DP 家族各一份標準模板;實作解法庫、冷門技巧,以及五個最重的子題目都各自獨立成篇,從這裡連過去。

練習 11/30 ok · 14 again · 下一題: LC 91, LC 139, LC 300

回溯(Backtracking)

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

帶「復原」動作的系統性搜尋:choose/explore/un-choose 骨架、start_idx 的控制、跳過重複、剪枝,以及每個必會題型剛好一份的標準模板 — 大量的實作解答與 hard 級的帶狀態模板放在兩個衛星檔裡。

練習 4/23 ok · 5 again · 下一題: LC 39, LC 17, LC 131

背包 DP(0/1、完全背包、Coin Change)

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

完整的背包問題家族:0/1 vs 完全背包(unbounded)vs 有界背包(bounded)vs 分組背包(group)、子集合和(subset-sum)的化簡、為什麼 0/1 的內層迴圈要倒序,以及區分組合與排列的迴圈順序規則。

練習 2/13 ok · 6 again · 下一題: LC 322, LC 416, LC 279

DP 模式總表

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

模板索引:每個經典 DP 模式各佔一小節(Kadane、LIS、MCM、LCS、背包、狀態機、格子、位元遮罩、數位、樹上 DP、正規表達式、加權區間排程、切分、記憶化 DAG)。

DP 迴圈順序與相依性

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

為什麼自底向上 DP 的迴圈巢狀與方向是由它自己的轉移式所決定的、錯誤順序會失敗的四種方式,以及用五種順序實作 LC 139 Word Break——包括那個看起來正確、能通過 "leetcode"、卻悄悄在題目自己的 Example 2 上失敗的寫法。

DP 進階技巧

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

DP 的附錄——第一輪該跳過的技巧:賽局理論/minimax DP、樹形與換根 DP、區間與字串 DP 的深入探討、機率與按步數計數的 DP、單調佇列與單調堆疊承載的 DP,以及從主表裁掉的長篇推導。

字串 DP(雙序列網格模式)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

在一或兩個字串上做的 DP:dp[m+1][n+1] 的雙序列網格、以前綴為基礎(1-indexed)的表格設計,以及 LCS、編輯距離、交錯字串、萬用字元/括號比對的完整範例。

從遞迴到動態規劃的轉換

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

一套機械化的流程:遞迴 → 記憶化(memoization) → 表格化(tabulation) → 空間最佳化,一次套用在一題上。

進階回溯

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

需要在遞迴中額外攜帶狀態的困難級回溯 — 一個 Trie 節點、前一個運算元、一份刪除額度 — 再加上約束傳播、記憶化搜尋,以及第一輪學習應該直接跳過的通用切分模板;必背的基本形狀不會在這裡重複。

遞迴

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

把遞迴當成一種機制來談:base case、往下傳的狀態 vs 往上回傳的結果、呼叫堆疊的成本,以及怎麼改寫成迭代。使用遞迴的那些題型家族各自有專屬檔案。

DP — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

不是模板錨定題的經典 DP 題(LC 343、91、62、279、276、1137),每一題都是一張 problem card,歸檔在它所歸約到的 dp.md 模板底下,再加上一份「其他常見 DP 題在哪裡有完整解」的索引;本身不放模板也不談理論。

Kadane’s Algorithm(卡登演算法)

優先度 3/5 — 值得會 — 多半是必備模式的變形

深入最大子陣列這個題型家族:Kadane 本體與它的各種變形(乘積、環狀、可刪除一個元素、二維)。

位元遮罩 DP(狀態壓縮)

優先度 3/5 — 值得會 — 多半是必備模式的變形

狀態是「一個用整數編碼的子集合」的 DP:遮罩運算、子遮罩列舉、TSP 與指派問題的模板,以及 n <= 20 這條規模上限。

單調堆疊 + DP

優先度 3/5 — 值得會 — 多半是必備模式的變形

單調堆疊上還掛著一個 DP 值的題型:「這個元素能撐過幾輪」、直方圖最大矩形那類面積 DP,以及最大正方形/計算正方形數量的網格遞迴式。

回溯 — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

不是模板錨定題的那些回溯題(LC 17、784、996、93、140、980、22),每一題都是一張 problem card,歸檔在它所歸約到的 backtrack.md 模板底下;錨定題本身在那邊自己的 card 上解,這份不教任何自己的模板。

數位 DP(在限制下數數字)

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

數出某個區間內有多少數字滿足「逐位」的性質:tight/started/位置這組狀態、通用的 top-down 模板,以及 count(R) - count(L-1) 這個區間技巧。

貪婪與區間7 份

先排序再掃描,以及證明它正確的交換論證。

區間(Intervals)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

先排序再合併的區間題型 — 合併、插入、數重疊、最少刪除數。

貪婪演算法

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

每一步選當下最好的,以及證明這樣做安全的交換論證——區間排程、跳躍遊戲、任務分配——外加怎麼看出貪婪會失敗、必須改用 DP 的時機。

掃描線 — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

scanning_line.md 背後的完整解題檔案:六道題目,依「掃描究竟在數什麼」分組 — 重疊深度、加權總和、存活工作的堆積,或兩個有序清單的交集。

掃描線(Line Sweep)演算法

優先度 3/5 — 值得會 — 多半是必備模式的變形

掃描線:把每個區間轉成 +1 / -1 事件,依座標排序,掃過一次。

貪婪 — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

greedy.md 背後的題解倉庫:十四題,依貪婪選擇的形狀分組 — 往前延伸可達範圍、累積後歸零、依頻率交錯、排序後取走,或邊掃邊定案。

MyCalendar 中重疊判定邏輯的解說

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

只講一件事 — 區間重疊的判定式:閉區間 [a,b] vs 半開區間 [a,b),以及每一題 LC 各需要哪一種。

區間重疊(已移到 array_overlap_explanation.md)

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

僅作轉址。 這份文件在 2026 年 11 月改名為 array_overlap_explanation.md,修正拼錯的檔名;留著只是為了把舊連結導向正確的章節。

轉址

區間查詢與進階結構4 份

只有在題目同時需要「更新」和「區間查詢」時才動用這些 — 否則前綴和就夠了。

Segment Tree & Binary Indexed Tree (Fenwick Tree)

優先度 3/5 — 值得會 — 多半是必備模式的變形

支援區間查詢+區間更新的結構 —— 線段樹(segment tree)、懶惰標記(lazy propagation),以及 BIT vs 線段樹 vs 合併排序該怎麼選。

串流演算法

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

被限制在單趟掃描與次線性記憶體之下的演算法 —— 蓄水池抽樣、Boyer-Moore 多數投票、加權隨機挑選,以及近似計數。

記憶體上限下的演算法

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

輸入放不進 RAM 時該怎麼做:位元向量、先分桶再細化的多趟掃描、依雜湊切分檔案,以及外部合併排序——這些技巧以多掃幾趟為代價,仍能回傳精確答案。

數學與位元運算5 份

小而自足的主題。學習成本低,偶爾一題定生死。

Bit Manipulation — 實戰題解

優先度 3/5 — 值得會 — 多半是必備模式的變形

bit_manipulation.md 背後的題解檔案庫:十九題,依照它們吃到位元運算子的哪個性質分組 —— XOR 把成對元素抵銷、清掉最低的 set bit、不用進位的算術、用一個整數代表一個子集合,或是親手打造遮罩來改寫一段位元欄位。

位元運算

優先度 3/5 — 值得會 — 多半是必備模式的變形

整數在位元層次上是怎麼被表示的(二補數、固定位寬、位移),以及建立在其上的各種運算與技巧:遮罩、XOR 恆等式、最低位 1、子集列舉,還有 bitmask DP。

數學

優先度 3/5 — 值得會 — 多半是必備模式的變形

面試中的數值操作 — 取位數、避免溢位的算術、進位轉換、開根號與次方。公式層級的計數則在隔壁那份。

數學與邏輯謎題

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

解腦筋急轉彎類題目的四個招式:計算一次測試能買到多少資訊、平衡最壞情況、找出不變量,以及運用期望值的線性性。本篇教的是招式,而不是謎題清單。

組合數學與數學模式

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

面試會考到的計數與數論:模運算、GCD/LCM、篩法、nCr、蓄水池抽樣,以及基本幾何。

設計與模擬7 份

「設計一個 X」與低階設計關卡 — 評分看的是操作複雜度與類別建模,不是花招。

物件導向設計(OOD/Low-Level Design)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

低階設計那一關 — 類別建模、SOLID,以及面試官真的會問的設計模式(strategy、observer、factory、state),附完整的設計範例。

系統設計題 — 實作範例

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

design.md 背後的「設計一個 X」實作題,每題一張題目 card,依它逼出來的結構搭配(design.md 的模式)歸類。

系統設計題(Design)

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

LC 的「設計一個 X」題型:從題目讀出必須支援的操作,再挑出能讓每個操作都做到 O(1) 或 O(log n) 的結構組合;實際寫出來的設計放在 examples 那一頁。

Iterator(迭代器)

優先度 3/5 — 值得會 — 多半是必備模式的變形

迭代器契約:hasNext/next 搭配延遲狀態、攤平、預看與合併,單一觀念獨立成篇。

系統設計類的實作模式

優先度 3/5 — 值得會 — 多半是必備模式的變形

那些會被當成「寫程式題」來考的分散式系統模式:一致性雜湊、token bucket 與 leaky bucket 限流、以及各種負載平衡演算法,附上可直接跑的實作,以及面試官一定會追問的取捨。

並行處理模式(Java)

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

L4 以上會出現的少數幾題 Java 並行題:依序列印、生產者/消費者、讀寫協調與死結避免,以及它們會用到的同步原語。

進階模擬

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

那種「答案就是忠實地一步步跑完」的題目:狀態機、機器人/格子上的行走、遊戲回合、迭代改寫,外加怎麼讓這種程式碼不要爆長。

語言工具箱8 份

語言機制,不是演算法。為了寫得快,也為了不再因為可避免的坑而掉 submission。

Python 操作複雜度

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

每一個 Python 內建與容器操作實際上要花多少成本,以及為什麼:內建函式、list、str、dict/set、tuple、deque、heapq、bisect 與 int 的逐項查表,每個成本背後的 CPython 記憶體排版,以及那七個會悄悄把 O(n) 解法變成 O(n²) 的寫法。

Java 字串與排序速查表

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

Java 的 String 與 StringBuilder 操作 — 與 char[] 互轉、切片、解析、組字串與修改 — 加上所有跟 comparator 有關的東西:陣列、集合與 map 的排序,以及決定順序的回傳值規則。

Java 容器與陣列速查表

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

存放資料用的 Java 函式庫 API:陣列與二維陣列、list、map、佇列、堆積、堆疊與 pair — 每一種怎麼初始化、複製、走訪、索引,以及過程中的陷阱。

Java 技巧與慣用寫法

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

決定「正確的演算法會不會算出正確答案」的那些 Java 語言語意:字元其實是整數、傳值與傳參考的差別,以及整數運算。函式庫 API 則放在另外兩份姊妹速查表。

Python 技巧與慣用寫法

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

解題過程中會用到的 Python 語言慣用寫法 — 複製、字串處理、排序 key、整數運算、生成式(comprehension)與作用域 — 依「你想做什麼」來分組。標準函式庫、索引運算與各項操作的成本另有專屬速查表。

Python 插入、切片與索引運算

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

Python 解法「邏輯明明對了卻答錯」的兩大元凶:插入到底落在哪一格,以及一段索引區間指的是「個數」還是「距離」。

面試用的 Python 標準函式庫

優先度 4/5 — 高價值 — 這裡有缺口就會掉關

逐個函式庫的參考手冊:heapq、sortedcontainers、內建排序(sorted / list.sort)、bisect、collections、itertools、functools 與 datetime——每個呼叫、它們的複雜度,以及各自是為了取代哪一種手寫寫法而存在。

Python 陷阱與並行處理

優先度 3/5 — 值得會 — 多半是必備模式的變形

那些會悄悄害你 submission 掛掉的 Python 行為:可變預設參數、closure 的延遲綁定、整數快取、複製語意,再加上 GIL 與 Python 的並行處理全貌。

面試方法論6 份

怎麼分類一道題、怎麼說出它的複雜度。第一次模擬面試前先讀。

LeetCode 模式指南

優先度 5/5 — 必備 — 幾乎每一輪面試都會出現

入口:從題目敘述走到解它的那張 card — 敘述裡的訊號、限制條件的提示、模式、指向那張 card 的連結,以及長得像、其實不是的那一題。這裡只做路由:每個模板都在表格連到的 card 裡。

練習 14/27 ok · 11 again · 下一題: LC 206, LC 322, LC 347

複雜度分析練習題

優先度 3/5 — 值得會 — 多半是必備模式的變形

20 道自我測驗題 — 讀程式片段、說出複雜度、再對答案檢查自己。

LC 題型分類索引(wisdompeak)

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

指向 wisdompeak 的題目分類表,並把它的 29 個分類對應到本 repo 中負責教它的那份 cheatsheet。分類表本身不在這裡複製一份。

轉址

程式面試流程

優先度 2/5 — 冷門 — 讀過一次即可,除非目標公司已知會問

轉址頁。原本的六步面試流程已經搬進 lc_pattern.md,那才是你開始解題時真正會打開的那一頁。

轉址

使用方式:先挑主題,讀它的「範圍」那行確認這份文件確實涵蓋你的問題,再直接跳到標星的章節 —— 每份速查表內部值得背的章節也標了同一套星等。練習數字來自練習紀錄。

原始檔:GitHub 上的 i18n/zh — 星等與分組定義在 data/cheatsheet_meta.json。