给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
一刷:
贪心算法,利用局部最优解求值:
class Solution:
def jump(self, nums: List[int]) -> int:
n = len(nums)-1
pos = 0
num_jump = 0
while(pos<n):
num_jump += 1
max_jump = 0
next_jump = 0
for i in range(1,nums[pos]+1):
pos_next = pos + i
if pos_next >= n:
return num_jump
else:
max_jump = max_jump if max_jump >= i + nums[pos_next] else i + nums[pos_next]
next_jump = i if max_jump == i + nums[pos_next] else next_jump
pos = pos + next_jump
return num_jump
时间复杂度为O(n),空间复杂度为 O(1)