class Solution:
def jump(self, nums: List[int]) -> int:
# 和前面一题不一样,这题是求最少的跳跃次数
# 贪心算法:找出下一步能到的区间,并从区间中取出下下一步能到达最远位置的点作为下一步到达的点
length = len(nums)
if length == 1:
return 0
left, right = 1, nums[0]
step = 1
while right < length - 1:
for i in range(left, right + 1):
# 遍历当前能到达的所有点,取出下一次能到达的最远位置的点,并用left和right记录该点下一次能到达的区间
if nums[i] + i > right:
right = nums[i] + i # right更新,left更新
left = i + 1
step += 1
return step
这个解法大致的思路是这样的,因为能跳的更远,所以有更多的机会接触到下一个跳得更远的数