刷題的目的:模式識別,不是記憶題目
工程師面試的算法題有一個共同的解法路徑:識別題目的模式 → 套用對應的數據結構或算法 → 分析時間空間複雜度。
隨機刷 200 題的問題是:你記住了 200 個解,但沒有建立「這類題型套這類方法」的模式識別能力。換一個版本的題目就不會了。
系統推進的方式:每個主題連續做 10-20 題,直到看到題目的特徵就能反應「這是 Sliding Window / Two Pointers / BFS / DP」。
推薦的刷題順序
第一階段:基礎數據結構(2-3 週)
-
Array / Two Pointers / Sliding Window(~20 題)
- Two Sum、Best Time to Buy and Sell Stock
- Container with Most Water(Two Pointers)
- Longest Substring Without Repeating Characters(Sliding Window)
-
Hash Table(~10 題)
- Group Anagrams、Top K Frequent Elements
-
Stack / Queue(~10 題)
- Valid Parentheses、Min Stack、Implement Queue using Stacks
-
Linked List(~10 題)
- Reverse Linked List、Detect Cycle、Merge Two Sorted Lists
第二階段:樹和圖(3-4 週)
-
Binary Tree(BFS / DFS)(~20 題)
- Invert Binary Tree、Maximum Depth、Level Order Traversal
- Validate BST、Lowest Common Ancestor
-
Graph(BFS / DFS)(~15 題)
- Number of Islands(BFS / DFS 的 template)
- Clone Graph、Course Schedule(Topological Sort)
-
Heap / Priority Queue(~10 題)
- Kth Largest Element、Find Median from Data Stream
第三階段:動態規劃(3-4 週)
-
1D DP(~15 題)
- Climbing Stairs → Fibonacci → House Robber → Word Break
- 理解狀態轉移方程
-
2D DP(~10 題)
- Unique Paths、Coin Change(Unbounded Knapsack)
- Longest Common Subsequence
第四階段:進階主題
-
Binary Search(~10 題)
- Binary Search 基礎 → Search in Rotated Sorted Array → 各種變形
-
Backtracking(~10 題)
- Subsets → Permutations → Combination Sum → N-Queens
-
Greedy(~10 題)
- Jump Game → Interval 題型
推薦清單
Blind 75:Sean Prashad 整理的 75 道題,覆蓋所有面試高頻題型,適合時間有限時的最小刷題集。
NeetCode 150:Blind 75 的延伸版,YouTube 有每題的詳細解說,對初學者友善。
LeetCode 官方 Study Plans:Graph、DP、Binary Search 等主題各有官方整理的題單,免費。
刷題策略
計時練習:實際面試有 30-45 分鐘限制。先不計時把每題弄懂,之後要開始計時——20 分鐘內不能想出思路就看解答,不是硬坐兩小時。
復習機制:做錯或做得慢的題,2 天後重做一次,1 週後再重做一次。
語言選擇:用你最熟悉的語言。面試官不在乎你用 Python 還是 Java,在乎的是你的思路和 coding 速度。
思路先於 code:面試時先說思路(「我想用 Sliding Window,時間複雜度是 O(n)」),確認方向對了再寫 code。邊思考邊寫的面試官不喜歡——會覺得你在試誤。
刷到什麼程度才夠
這個問題沒有標準答案,但一個參考指標:對於本章 F-A 的主要主題,能在 30 分鐘內解 Medium 難度的題目,不需要提示。
LeetCode 刷題是面試技巧,不是工程能力的全部。做到一定程度後,把時間分給系統設計(後端面試必考)和行為問題(往往比算法更影響 offer 決策)。