iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0

這幾天的學習進展主要集中在七題 LeetCode 練習,題型涵蓋動態規劃、雙指針、二分搜尋以及樹的遍歷,讓我在不同演算法思維上都有系統性的訓練。透過這幾題,我不僅練習了程式撰寫的技巧,也更深入理解如何將抽象的問題轉換成具體的解法,並在過程中培養出更細膩的邏輯拆解能力。

在 64. Minimum Path Sum 中,我學會了動態規劃的應用。這題的核心在於如何定義狀態與轉移方程,透過不斷累積子問題的解,最終得到整體最小路徑和。這題讓我體會到 DP 的魅力:一旦找到合適的狀態定義,複雜的問題就能化繁為簡。此外,我也思考到空間壓縮的技巧,例如利用滾動陣列來節省記憶體,這讓我開始更加關注演算法的實用性與效率。

  1. Valid Palindrome II 則讓我練習了雙指針的靈活操作。題目要求在允許刪除一次字元的情況下檢查是否為回文,這讓我不僅要處理一般的回文檢查,還需要在出現不一致時同時嘗試「刪左」或「刪右」的情境。過程中,我發現自己必須非常注意邊界條件的設計,否則容易遺漏部分測資。這題讓我深刻體會到「細節決定成敗」,特別是在字串處理這類題目中,嚴謹性比速度更重要。

在 74. Search a 2D Matrix 中,我體驗到了思維轉換的重要性。雖然題目表面是矩陣搜尋,但由於矩陣本身具備行與列的排序特性,我可以直接把它視為一維排序陣列,套用二分搜尋來解決。這題讓我理解到一個觀念:解題時不要被形式困住,要從結構中尋找更高層次的規律。這種「轉換思考」的能力,對未來解決更複雜問題會非常有幫助。

接著在三題樹相關的練習中:404. Sum of Left Leaves、226. Invert Binary Tree 和 104. Maximum Depth of Binary Tree,我更熟悉了樹的遍歷方式以及遞迴的應用。404 題訓練我如何精準判斷左子葉並累積計算;226 題則是樹結構的鏡像反轉,讓我更直觀地練習了遞迴的「先處理子樹,再組合回父節點」的思路;104 題則是計算樹的最大深度,這題同時可以用 DFS 或 BFS 來實現,幫助我比較不同演算法的差異與適用場景。這些題目共同讓我更熟悉遞迴與迭代的切換,也讓我看到樹題其實有一套可循的「模板化思維」,能提高解題效率。

總結這幾天的練習,我覺得最大的收穫是思維彈性的提升與解題模式的累積。不同題型背後往往存在共通的核心邏輯,例如 DP 的自底向上思維與樹的遞迴過程有異曲同工之妙;二分搜尋的思想也能延伸到各種結構,不僅限於排序陣列。雖然我有時會覺得程式設計需要很強的邏輯推理,過程也難免有挫折,但當我逐漸能把複雜問題拆解成小步驟並完成時,會感受到相當的成就感。

未來也將會挑戰更題目,例如結合動態規劃與字串處理,或是樹與圖的延伸應用。透過更廣泛的練習,我相信能逐步累積出屬於自己的解題框架,並在演算法學習的路上走得更穩健。


上一篇
Day 7(104.Maximum Depth of Binary Tree)
下一篇
Day 9
系列文
從Leetcode到實務的橋樑13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言