LeetCode 筆記 - 778. Swim in Rising Water
挑戰 LeetCode 778 題,在水位上升的網格中尋找最短過河路徑。本文結合 Dijkstra 演算法與優先權佇列 (Priority Queue),動態計算到達目標位置所需的最小等待時間,分析路徑搜尋中的貪心策略。
挑戰 LeetCode 778 題,在水位上升的網格中尋找最短過河路徑。本文結合 Dijkstra 演算法與優先權佇列 (Priority Queue),動態計算到達目標位置所需的最小等待時間,分析路徑搜尋中的貪心策略。
解析在 0/1 矩陣中尋找最大全 1 矩形的面積。本文展示如何將二維問題轉化為多個一維的「直方圖最大矩形」問題,透過動態更新高度陣列並重複套用單調堆疊演算法,達成高效的空間與時間運算。
解析 LeetCode 買賣股票系列問題之二。本文分析在不限制交易次數的情境下,如何利用貪婪演算法 (Greedy) 捕捉所有上升趨勢來最大化利潤,並提供時間複雜度 O(n) 的極簡實作思路。
詳解在直方圖中尋找最大矩形面積的經典演算法。本文介紹如何利用單調堆疊 (Monotonic Stack) 在 O(n) 時間內找出每個柱子左右兩側的第一個較矮柱子,進而計算出以該柱子為高度的最大矩形。
解析經典的「荷蘭國旗問題」(Dutch National Flag Problem)。本文介紹如何在不使用內建排序的情況下,利用三個指標在一次遍歷中完成 0、1、2 的原地排序,達成最優的 O(n) 時間複雜度。
分析 LeetCode 經典困難題「正規表達式匹配」。本文探討如何處理特殊的句點與星號字元,利用動態規劃 (Dynamic Programming) 逐步構建匹配矩陣,解決字串間複雜的模式比對邏輯,是訓練 DP 思維的必經之路。
解析 LeetCode 3468 題,計算符合特定邊界條件的「複製陣列」數量。本文探討如何透過差分性質將問題轉化為區間交集運算,並利用動態更新的上下界在 O(n) 時間內求得所有可能的陣列組合數。
詳解 LeetCode 31 題:尋找字典序中的下一個排列方式。本文拆解演算法的三大步驟:從後方尋找遞減點、尋找替換數值並進行反轉,幫助讀者理解如何在 O(n) 的時間與 O(1) 的空間內完成排列切換。
解析 LeetCode 經典字串解碼題目。本文利用堆疊 (Stack) 資料結構處理巢狀重複結構 k[encoded_string],逐步將字串展開並組合,詳細說明處理數字、中括號與字母的狀態切換邏輯。
詳解 LeetCode 困難題「接雨水」。本文探討如何運用雙指標 (Two Pointer) 演算法,從兩端向中間逼近並動態更新左右側的最大高度,從而計算出每個位置能儲存的水量,達成 O(n) 時間與 O(1) 空間的最優解。