LeetCode 45. 跳跃游戏 II

题目

给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。

例:
输入: nums = [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

方法

贪心算法的思路就是通过局部最优推出整体最优,应用到该题中就是,每一步尽可能多走,从而实现最小步数

  • curCover 表示这一步的最大覆盖范围,nextCover 表示下一步的最大覆盖范围,count 表示步数
  • 若 nums 数组只有一个元素,那么步数为零
  • 若 nums 数组含有多个元素,循环遍历数组。首先,更新 nextCover。若下标到达这一步的覆盖的最远处 curCover,那么此时需要再次判断该点是否为数组的终点,若并未到达数组的终点,那么步数加一,并且将下一步的最大覆盖范围赋值给这一步的最大覆盖范围。并且判断下一步的最大覆盖范围是否覆盖到数组的末尾,若覆盖到,则结束循环,输出步数
class Solution(object):
    def jump(self, nums):
        curCover, nextCover = 0, 0
        count = 0
        if len(nums) == 1:
            return 0
        for i in range(len(nums)):
            nextCover = max(nextCover, i + nums[i])
            if i == curCover:
                if curCover != len(nums) - 1:
                    count += 1
                    curCover = nextCover
                    if nextCover >= len(nums) - 1:
                        break
        return count
参考

代码相关:https://programmercarl.com/0045.%E8%B7%B3%E8%B7%83%E6%B8%B8%E6%88%8FII.html

你可能感兴趣的:(LeetCode 45. 跳跃游戏 II)