📕 編程之美
微軟技術面試心得
🔀 一題多解
🎯 什麼情境該想到我
當你「已經有一個能動的解,但覺得太慢/太笨、想找更漂亮更高效的解法」時。
⚙️ 怎麼用
- 先有正確的暴力解:別一開始就追最優,先確保對。
- 找重複與浪費:哪裡在重算?(→ 記憶化/DP)哪裡在做無用功?(→ 剪枝)
- 換角度重新表述問題:從數學、資料結構、對稱性等不同視角看,常有簡潔解。
- 列出多個解並比較取捨:時間 vs 空間 vs 可讀性,選最適合當前場景的(不一定是漸進最優)。
- 用具體小例子驗證每個新解仍正確。
🧪 我實際套用的紀錄
- 2026-07-15:(待填)
⚠️ 注意
- 最優解不總是最好選擇;若可讀性/維護性代價太高,簡單夠快的解更務實(見 工具-簡單清楚至上)。
🔗 相關工具
- 工具-演算法設計策略 —— 找第二解時的搜尋方向:先辨認題目屬於哪種策略,比亂試有效率
- 工具-用類比解決新問題 —— 另一條找解路徑:想不出新解法時,從解過的相似問題借結構
- 工具-時間複雜度分析 —— 判斷「新解真的比較好嗎」的量尺,避免只是換個寫法卻沒變快
同一題不同角度切入 模擬、數學、資料結構、位元運算…
比較各解的取捨 時間 / 空間 / 可讀性 / 實作成本
📈 逐步優化
先求正確 能動的暴力解才是起點
消除重複計算 記憶化、動態規劃、預處理
換更合適的資料結構 用結構換掉多餘的掃描
🧮 數學直覺
問題背後常有簡潔的數學結構 找到它就能大幅簡化
例:位元運算與公式解 把迴圈換成一行式子
🎈 享受思考本身
把難題當謎題玩 而不是苦差事
例:讓 CPU 使用率畫出正弦曲線 從玩心出發的經典題