75 道經典演算法題,面試必備
用雙指針交替從兩字串取字元合併成新字串
用 GCD 長度截取候選字串並驗證是否能重複拼成原字串
找出陣列最大值後逐一比較每個孩子加上額外糖果是否達標
用貪心法逐格檢查左右鄰居是否為空來決定能否種花
用左右雙指針找到母音後交換位置
分割字串去除多餘空格後反轉單字順序
用前綴積和後綴積相乘得到每個位置除自身外的乘積
維護兩個最小值 first 和 second 來判斷是否存在遞增三元組
用雙指針原地壓縮字元陣列記錄字元和出現次數
用快慢指針將非零元素往前搬並保持相對順序
用雙指針逐字元匹配判斷 s 是否為 t 的子序列
用左右指針從兩端夾逼,每次移動較矮的那邊來尋找最大面積
用排序雙指針或 HashMap 找出最多配對使兩數之和等於 k
用固定大小滑動窗口維護子陣列的和來找最大平均值
用固定大小滑動窗口計算子字串中的母音數量
用可變大小滑動窗口追蹤翻轉次數來找最長連續 1 的子陣列
用滑動窗口允許最多一個 0 來找刪除一個元素後最長的全 1 子陣列
用前綴和累加海拔變化量並追蹤過程中的最大值
用總和減去左前綴和來判斷是否存在左右和相等的樞紐點
用 Set 差集找出兩個陣列各自獨有的元素
用 Counter 統計頻率後用 Set 檢查頻率是否唯一
比較兩字串的字元集合相同且頻率排序後相同來判斷是否 close
將每行轉為字串鍵存入 HashMap 再逐列比對計數
用 Stack 模擬星號刪除操作逐字元處理字串
用 Stack 模擬小行星碰撞邏輯處理正負方向的交互
用 Stack 處理巢狀的 k[encoded_string] 編碼字串
用 Queue 維護 3000ms 時間窗口內的請求數量
用雙 Queue 模擬 Radiant 與 Dire 的投票淘汰過程
用快慢指針找到中點的前一個節點,刪除中間節點
將奇數位和偶數位節點分離後重新連接
用迭代或遞迴將 Linked List 的指針方向全部反轉
用快慢指針找中點、反轉後半段,配對求最大 twin sum
用遞迴 DFS 計算二元樹的最大深度
用 DFS 收集兩棵樹的葉節點序列並比較是否相同
DFS 遍歷時追蹤路徑上的最大值來判斷 good node
用前綴和 + HashMap 在 DFS 中高效計算路徑和等於目標值的數量
DFS 追蹤左右交替方向,計算最長 ZigZag 路徑
用後序遍歷從底部向上尋找兩個節點的最低公共祖先
BFS 逐層遍歷,收集每層最後一個節點
BFS 逐層計算節點值總和,找出總和最大的層級
利用 BST 左小右大的性質高效搜尋目標值
處理三種刪除情況:無子、單子、雙子節點
用 DFS 或 BFS 檢查從房間 0 出發能否到達所有房間
用 DFS 或 Union-Find 計算無向圖的連通分量數
DFS 遍歷樹形圖,計算需要反轉方向的邊數
建立帶權重的有向圖,用 DFS 計算變數間的除法結果
BFS 從入口出發尋找最近的邊界出口
多源 BFS 模擬腐爛橘子向四方擴散的過程
用大小為 K 的 Min Heap 維護前 K 大的元素
用 Min Heap 搭配 HashSet 管理無限集合的最小元素
排序配合 Min Heap 維護 K 個最大元素,貪心取得最大分數
雙 Min Heap 從兩端模擬每次取最便宜的工人
經典二分搜尋,透過 API 回饋縮小搜尋範圍
排序藥水陣列後用二分搜尋找出每個法術的成功配對數
二分搜尋利用相鄰元素的遞增遞減趨勢找到峰值
二分搜尋答案空間,找到最小吃香蕉速度使得在時限內吃完
回溯法枚舉電話鍵盤上每個數字對應字母的所有組合
回溯加剪枝,從 1-9 中選 K 個不重複數字使其和為 N
基礎 DP 或滾動變數計算 Tribonacci 數列第 N 項
1D DP 計算爬到樓頂的最小成本,每次可跨一或兩階
不相鄰子序列最大和,經典 1D DP 取或不取的決策
狀態轉移方程推導 2×N 棋盤用 Domino 和 Tromino 的鋪法數
2D DP 計算從左上到右下的不同路徑數
經典 2D DP 比較兩個字串找出最長公共子序列長度
狀態機 DP 追蹤持有和未持有股票兩種狀態的最大利潤
經典字串 DP,用插入、刪除、替換三種操作將一個字串轉換為另一個
DP 加位元運算,利用已算過的結果推導每個數字的 1 的個數
XOR 的自消性質,所有成對數字互消後剩下的就是唯一的單獨數字
逐位元分析,根據 c 的每一位決定 a 和 b 需要翻轉幾次
實作 Trie 資料結構,支援插入、搜尋和前綴查詢
排序加二分搜尋(或 Trie + DFS)實作搜尋建議功能
貪心策略按結束時間排序,移除最少區間使其不重疊
區間貪心,找最少的箭能射穿所有氣球的重疊區域
單調遞減 Stack 追蹤尚未找到更暖天數的日子
單調 Stack 即時計算股票價格的連續跨度