当前位置: 首页 > 工具软件 > 游戏跳跃 > 使用案例 >

跳跃游戏2

施旭东
2023-12-01

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

题解:贪心算法,局部最优:当前可移动距离尽可能多走,如果还没到终点,步数再加一。整体最优:一步尽可能多走,从而达到最小步数;写代码的时候不可以一次想走多少就走多少。最小的步数增加覆盖范围,覆盖范围一旦覆盖了终点,得到的就是最小步数。要有两个覆盖范围,这一个覆盖范围和下一个覆盖范围。

class Solution {
public:
    int jump(vector<int>& nums) {
        if (nums.size()==1) return 0;
        int curStep=0;   
        int ans=0;            
        int nextStep=0;  
        for (int i=0;i<nums.size();i++) {
            nextStep=max(nums[i]+i,nextStep);  
            if (i==curStep) {                         
                if (curStep!=nums.size()-1) { 
                    ans++;                                 
                    curStep=nextStep;             
                    if (nextStep>=nums.size()-1) break; 
                } else break;                               
            }
        }
        return ans;
    }
};

 类似资料: