LeetCode 筆記 - 778. Swim in Rising Water
題目在此 778. Swim in Rising Water
給定一個 m x n
的整數矩陣 grid
,其中每個元素代表該位置的高度。你從左上角 (0, 0)
開始,目標是到達右下角 (m-1, n-1)
。你可以向上、下、左、右移動,但只能在當前時間 t
大於或等於你所在位置的高度時才能移動。
請找出到達目標位置右下角所需的最小時間 t
。

解題思維
這題可以使用 Dijkstra 演算法 來解決,因為我們需要找到一條從起點到終點的路徑,使得路徑上所有位置的最大高度(即所需的時間 t
)最小化。
具體來說,我們可以使用一個最小堆(min-heap)來優先處理當前時間 t
最小的位置。每次從堆中取出當前時間 t
最小的位置,然後檢查其四個相鄰位置。如果相鄰位置尚未訪問過,則計算到達該位置所需的時間 t
(即當前時間 t
與該位置高度的最大值),並將其加入堆中。
Time complexity 是 $O((m \times n) \times\log(m \times n))$
因為我們最多會處理 m * n
個位置,而每次插入和取出堆的時間複雜度是 $O(\log(m \times n))$。
Space complexity 是 $O(m \times n)$,因為我們需要一個集合來記錄已訪問的位置以及堆的空間。
程式碼
1 | class Solution: |