【LeetCode42】-跳跃游戏2

实现思想

主要贪心的思想就是能不跳就不跳,不得不跳的时候选最远跳
在这里插入图片描述在这里插入图片描述

实现代码

在这里插入图片描述

class Solution {
    
    
public:
    int jump(vector<int>& nums) {
    
    
        int n=nums.size();
        if(n<2) return 0;
        int cur_max=nums[0];
        int pre_max=nums[0];
        int jump_min=1;
        for(int i=0;i<n;i++){
    
    
            if(i>cur_max){
    
    
                cur_max=pre_max;
                jump_min++;
            }
            if(pre_max<nums[i]+i)
                pre_max=nums[i]+i;
        }
        return jump_min;
    }
};

提交结果及分析

总结

这道题为 【LeetCode55】-跳跃游戏的升级版本
我原先的思想是想要在LeetCode55代码的基础上进行编写,但是结果并不理想,具体如下
在这里插入图片描述出现这样结果的原因在于,LeetCode55的最终目标是通过不断贪心达到终点的目的,只管跳就可以了,使用while循环限定条件,jump在合理的范围,只管越跳越远就行。而这道题目却不同,这道要求跳数最少,也就是贪心的能不跳就不跳,要跳就跳最远,所以这道题比上一道题多了一个变量来记录此状态下不跳最远能到哪儿里,为了方便记录这一变量,并且进行必要跳跃,采取的从0到n依次遍历整个数组。

猜你喜欢

转载自blog.csdn.net/weixin_44944046/article/details/113784839