55. Jump Game
題目網址:https://leetcode.cn/problems/jump-game/
題意:給一非負整數 array
nums
, 最初位置在nums[0]
, 其中nums
中的每個元素代表該位置可以跳躍的最大長度, 返回是否能從起點抵達最後一個 index。
Solution 1:
想法:利用 DP, 其中
dp[i]
代表第i
個點能否被抵達, 條件是i
前面的任意點j
能被抵達 (dp[j] = true
), 且能從j
跳到i
(j + nums[j] >= i
), 故得到狀態轉移方程:
dp[i] = (dp[j] == true) && (j + nums[j] >= i)
, 其中0 ≤ j < i
從下圖中可看到, 從
idx = 2
開始往後走的有重複, 故用 cache 把結果存起來, 避免重複計算
class Solution { |
- time:$O(n^2)$ ➔ for loop
- space:$O(n)$ ➔
dp
Solution 2:
想法:利用 Greedy, 從終點往回推, 只要有某點能到達終點, 就把該點設為終點(因為其他點只要能到達該點, 就一定能抵達終點)。若最後終點等於
0
, 則代表能從起點能走到終點
class Solution { |
- time:$O(n)$ ➔ for loop
- space:$O(1)$ ➔ 只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論