演算法圖鑑
Searching & Two Pointers · 比較表

搜尋與雙指標技巧比較

線性搜尋、二分搜尋、對答案二分、雙指標、滑動視窗:各自要求什麼前提、解決哪種問題。

演算法時間空間前提回答的問題難度
Linear Search線性搜尋O(n)O(1)沒有x 在不在、在哪入門
Binary Search二分搜尋O(log n)O(1)已排序、可隨機存取x 的位置、第一個 ≥ x 的位置入門
Binary Search on Answer二分答案O(n log R)O(1)答案具單調性最小可行值/最大可行值困難
Two Pointers雙指標O(n)O(1)已排序,或兩端可收斂配對、去重、分割進階
Sliding Window滑動視窗O(n)O(k)連續區間、可增量維護最長/最短/計數的子陣列進階

什麼時候選哪一個

選擇指南

  • 有序 + 找一個值或邊界 → 二分搜尋。有序 + 找一對 → 雙指標。
  • 「連續」兩個字出現 → 滑動視窗。子序列(不連續)不是視窗,通常是 DP。
  • 問最小/最大的可行值,而不是位置 → 對答案二分。關鍵字:「最少需要多少」「最大能到多少」「最小化最大值」。
  • 視窗內的條件無法 O(1) 更新(例如視窗中位數)→ 滑動視窗不夠,要配單調佇列、平衡樹或兩個堆積。
  • 無序又要常查 → 不是搜尋演算法的問題,先排序(O(n log n) 一次)或改用雜湊表(O(1) 每次)。