Skip to content

AI Analysis (繁體中文)

🎯 使用方式(建議學習動線)

  • 先學 API Kernel(解題引擎)→ 再學 Pattern(不變量/狀態)→ 最後刷題
  • 先把 Sliding Window / Two Pointers / Backtracking / BFS / Merge / Partition / Heap / Binary Search 各挑 1 題做「模板題」
  • 每個 Pattern 至少刷 2 題(1 題模板 + 1 題變形)
  • 每次寫完:記錄 Invariant(不變量)State(狀態),避免只背程式

🧠 API Kernels(核心解題引擎)總覽

  • SubstringSlidingWindow:序列上的 1D 視窗狀態機(動態不變量)
  • TwoPointersTraversal:雙指標協調移動(相向/同向/枚舉)
  • FastSlowPointers:快慢指標(環/中點/隱式序列)
  • TwoPointerPartition:分區(Dutch Flag / Quickselect)
  • MergeSortedSequences / KWayMerge:合併已排序序列(2 路 / K 路)
  • BacktrackingExploration:可逆探索(Choose→Explore→Unchoose)
  • GridBFSMultiSource:多源 BFS 波前擴散
  • HeapTopK:TopK / Kth / 串流中位數
  • BinarySearchBoundary:邊界二分 / 答案二分
  • (本資料集中:Tree/Trie/UnionFind/PrefixSum 等 Kernel 有定義,但題目樣本較少或未覆蓋)

🪟 Sliding Window(SubstringSlidingWindow)📚⚡

  • 核心心法:右指標只前進;左指標負責「恢復不變量」→ 整體 \(O(n)\)
  • State 常見freq map / need-have / last_index / window_sum
  • 兩種模式
  • 最大化視窗:違規才縮
  • 最小化視窗:一旦合法就盡量縮

✅ Pattern 對照表(必背)

類型 Invariant(不變量) State(狀態) 視窗 代表題
Unique 全部不同 last_index 或 freq 變動 LeetCode 3 - Longest Substring Without Repeating Characters · Solution
≤K distinct distinct ≤ K freq + distinct count 變動 LeetCode 340 - Longest Substring with At Most K Distinct Characters · Solution
Cover 覆蓋需求頻率 need/have + satisfied 變動 LeetCode 76 - Minimum Window Substring · Solution
Exact match 頻率完全相等 freq + matched 固定 LeetCode 567 - Permutation in String · Solution / 438
Cost bounded sum ≥ target window_sum 變動 LeetCode 209 - Minimum Size Subarray Sum · Solution

1) sliding_window_unique(全唯一)

2) sliding_window_at_most_k_distinct(至多 K 種)

3) sliding_window_freq_cover(覆蓋需求 / 頻率)

4) sliding_window_cost_bounded(成本/總和限制)


👉 Two Pointers(TwoPointersTraversal)📚

  • 核心心法:每次移動都在「永久排除」不可能區間
  • 子型態
  • 相向(Opposite)
  • 同向(Reader/Writer)
  • 排序後枚舉(3Sum/4Sum)
  • 合併(Merge Pattern)※本資料以 MergeSortedSequences 呈現

✅ Two Pointers 子型態比較表

子型態 指標初始化 移動規則 常見目標 代表題
相向 l=0,r=n-1 根據單調性移動 找 pair / 最大化 LeetCode 11 - Container With Most Water · Solution / 125 / 680
同向 Writer write=0, read=0 read 掃描,符合才寫 原地刪除/去重 LeetCode 26 - Remove Duplicates from Sorted Array · Solution / 27 / 283 / 80
排序枚舉 固定 i,內層相向 跳重 + 相向 3Sum/4Sum LeetCode 15 - 3Sum · Solution / 16
合併 i,j 取較小前進 merge sorted LeetCode 21 - Merge Two Sorted Lists · Solution / 88 / 977

1) two_pointer_opposite_*(相向雙指標)

2) two_pointer_writer_*(同向 Reader/Writer:原地修改)

3) two_pointer_three_sum(排序 + 去重枚舉)


🐢🐇 Fast–Slow Pointers(FastSlowPointers)


🧩 Partition(TwoPointerPartition)🔥


🔗 Merge(MergeSortedSequences / KWayMerge)

1) Merge 兩個已排序序列(Two Pointers)

2) K-way Merge(Heap / Divide & Conquer)

  • 🎯 代表題
  • [ ]LeetCode 23 - Merge k Sorted Lists · Solution(K 個排序鏈結串列)
  • 兩種作法比較 | 作法 | 時間 | 空間 | 特點 | |---|---:|---:|---| | Min-Heap | \(O(N \log k)\) | \(O(k)\) | 工程實務最常用 | | 分治合併 | \(O(N \log k)\) | 遞迴深度 \(O(\log k)\) | 常數較小、好做平行化 |

🧠 Backtracking(BacktrackingExploration)📚🔥

  • 核心節奏Choose → Explore → Unchoose
  • 最重要不變量:回溯後狀態必須「完全還原」
  • 五大形狀(快速辨識)
  • Permutation(用 used[]
  • Subset/Combination(用 start_index
  • Target Sum(用 remaining
  • Constraint Satisfaction(用 constraint sets)
  • Grid Path(用 visited / in-place mark)

✅ Backtracking 子型態對照(含題目)

子型態 主要 State 去重策略 代表題
排列 used[] sort + 同層跳重 LeetCode 46 - Permutations · Solution / 47
子集 start_index sort + 同層跳重 LeetCode 78 - Subsets · Solution / 90
組合 start_index + 固定長度 上界剪枝 LeetCode 77 - Combinations · Solution
目標和 remaining(可重用/不可重用) sort + 同層跳重 LeetCode 39 - Combination Sum · Solution / 40 / 216
約束滿足 cols/diags sets 天然不重複 LeetCode 51 - N-Queens · Solution / 52
字串切割 start validity check LeetCode 131 - Palindrome Partitioning · Solution / 93
網格路徑 visited 路徑唯一 LeetCode 79 - Word Search · Solution

1) backtracking_permutation(排列)

2) backtracking_subset(子集)

3) backtracking_combination(組合 / 固定大小)

4) backtracking_combination_sum(目標和)

5) backtracking_n_queens(約束滿足)

6) backtracking_string_segmentation(字串切割)

7) backtracking_grid_path(網格路徑)


🌊 BFS 波前(GridBFSMultiSource)

  • 核心心法:多源同時入隊 → 層序擴散 → 最短時間/步數
  • 🎯 代表題
  • [ ]LeetCode 994 - Rotting Oranges · Solution(腐爛橘子)
  • 常見 State
  • queue(座標 + 時間)
  • visited / grid 原地改值
  • 層數(minute)用「分層迴圈」或「隨節點帶時間」

🧱 Heap / TopK(HeapTopK)


🔍 Binary Search(BinarySearchBoundary / Answer Space)

  • 🎯 代表題(本資料集中有)
  • [ ]LeetCode 4 - Median of Two Sorted Arrays · Solution(同時用到:答案二分/邊界 + 合併思維)
  • 心法
  • Boundary:first true / last true(寫成 predicate)
  • On Answer:答案具有單調性(可行性隨答案變化)

🗺️ Roadmap 對齊(本資料題目覆蓋)


✅ 45 題進度追蹤(依 Kernel 分組)