本單元重點回顧

  1. 優化=換形狀,不是修零頭O(n^2) 砍半還是 O(n^2);出路是把成長形狀往下換一階(O(n^2) \to O(n \log n) \to O(n) \to O(\sqrt{n}) \to O(\log n) \to O(1))。

  2. 先問數學:規律的總和、配對、餘數,公式能把整段迴圈變 O(1)——但套公式前先確認型態裝得下(n(n+1) 很容易爆 int)。

  3. 用陣列儲存資訊:「索引當數字」的標記陣列把「x 出現過沒」變一步;陣列開多大看答案的範圍,不是盲目跟著值域開。這個思想的完整家族叫預處理,課程裡會深入。

  4. 因數成對,試到 \sqrt{n}:質數判斷從 O(n)O(\sqrt{n});邊界用 d * d <= n 純整數判斷(d 記得 long long),別碰浮點 sqrt

  5. 每輪減半,總量撐死兩倍n + n/2 + n/4 + \cdots < 2n。模擬題大量刪除時,逐一 eraseO(n^2)、整輪重建是 O(n)——操作成本選對,形狀就換掉。

  6. \log_2 n =一直除以 2 除幾次到 1:連 10^{18} 都只要 60 次;O(n \log n) 就是「掃一遍做 \log n 層」——sort 快的原因。\log 常出現在除法、砍半、切塊的場景。

  7. 改變枚舉順序:最後一層迴圈若能「用算的」,整層消失;動手前先用 10.1 三步驟估總次數,K^3 這種數字一出現就該回頭想。