力扣第45题-跳跃游戏2
力扣链接:45. 跳跃游戏 II - 力扣(LeetCode)
给定一个长度为 n
的 0 索引整数数组 nums
。初始位置为 nums[0]
。
每个元素 nums[i]
表示从索引 i
向后跳转的最大长度。换句话说,如果你在 nums[i]
处,你可以跳转到任意 nums[i + j]
处:
0 <= j <= nums[i]
i + j < n
返回到达 nums[n - 1]
的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]
。
示例 1:
输入: nums = [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是2
。从下标为 0 跳到下标为 1 的位置,跳1
步,然后跳3
步到达数组的最后一个位置。
示例 2:
输入: nums = [2,3,0,1,4] 输出: 2
"""
思路
我们找到初始位置的能跳到的区间,找到这个区间上,跳到最远的点,
把这个位置作为下一次的起跳点,一次类推,当最远点>=末尾位置的时候既为最少得步数
"""def jump(nums):if len(nums) <= 1:return 0end_index = len(nums) - 1step = 1left = 0right = 0 + nums[0]while right < end_index:for i in range(left + 1, right + 1): # 右侧是闭区间if nums[i] + i > right:right = nums[i] + ileft = i + 1step += 1print(step)jump([2, 3, 1, 1, 4])
jump([2, 3, 0, 1, 4])