Leetcode # 45. Jump Game II
- 2021.12.25
- Dynamic Programming Greedy Method LeetCode
https://leetcode.com/problems/jump-game-ii/
Solution (Dynamic Programming)
class Solution:
def jump(self, nums: List[int]) -> int:
DP = [0] + [float("inf")]* (len(nums) - 1)
for i in range(len(nums) - 1):
for j in range(i + 1, min(i + nums[i] + 1, len(nums))):
DP[j] = min(DP[j], DP[i] + 1)
return DP[-1]
Better Solution (Greedy Method)
從 index: 0 開始
每次前進至範圍之內 num 最大的那格
(若有複數格為最大則選擇最遠的那格)
Time Complexity: O(n)
Space Complexity: O(1)
class Solution:
def jump(self, nums: List[int]) -> int:
cur, jumps = 0, 0
while cur < len(nums) - 1:
if nums[cur] == 0:
return -1
jumps += 1
if cur + nums[cur] < len(nums) - 1:
max_dist, candicate = 0, cur
for step in range(1, nums[cur] + 1):
next_i = cur + step
if max_dist < nums[next_i] + step:
max_dist = nums[next_i] + step
candicate = next_i
cur = candicate
else:
break
return jumps
Last Updated on 2023/08/16 by A1go