【Leetcode每日一刷】贪心算法| 45.跳跃游戏 II

2024-03-11 7883阅读

1、45.跳跃游戏 II

【Leetcode每日一刷】贪心算法| 45.跳跃游戏 II 第1张

🦄解题路:

这题还是比【55.跳跃游戏】难一些的。第一个版本只是说,求跳跃的范围,覆盖到了终点即可。这题则是,能保证覆盖范围到达终点,求的是最少跳几次,跳到终点。

这题的话也是偏直觉,最好能一步到就好,一步到不了,两步能到吗?两步还到不了,三步呢?听起来是不是还挺简单的?但是实现起来,还是有一些需要考虑的。

【Leetcode每日一刷】贪心算法| 45.跳跃游戏 II 第2张

❌错误代码和分析1:

class Solution {
public:
    int jump(vector& nums) {
        int cover_now = 0;//当前元素所能cover的最远范围
        int cover_next_max = 0;//如果多跳一步,下一步将cover的最远范围
        int cnt = 0;//跳跃步数
        if(nums.size() == 1) return 0;
        for (int i = 0; i 
            cover_now = i + nums[i];
            if(cover_now = nums.size()-1){
                return ++cnt;
            }
            cover_next_max = max(cover_next_max, cover_now);
            ++cnt;
        }
        return cnt;
    }
};

【Leetcode每日一刷】贪心算法| 45.跳跃游戏 II 第3张

明白了大致思路,但是实现起来还是有问题,我们再来捋一下思路。

  • 首先要明白什么是now_cover:这个now指的是当前跳了cnt步,最远的覆盖范围!
  • 什么是next_cover_max:在现在cnt的基础上+1,也就是多跳一步(cnt++肯定就是已经确定,跳当前cnt步,肯定到不了终点),能到达的最远范围。
  • 而我们也知道,从当前位置,可以有多种跳跃选择,都是算再跳一步,那么怎么选择,才能让跳跃这一步,能在跳到的新位置能直接跳到终点或能跳的更远;这就是我们要求的下一步的最远距离:再跳一次,可以覆盖的最远范围:next_cover_max
  • 而什么时候需要跳呢,也就是说,当当前遍历位置,达到now_cover了,也就是说,跳当前的cnt步,无论如何都到达不了终点;那么这个时候cnt++说明需要多跳一步,跳的一个新位置,看看能不能从这个新位置到达终点。

    【Leetcode每日一刷】贪心算法| 45.跳跃游戏 II 第4张

    ✅正确代码:

    class Solution {
    public:
        int jump(vector& nums) {
            int cover_now = 0;//当前元素所能cover的最远范围
            int cover_next_max = 0;//如果多跳一步,下一步将cover的最远范围
            int cnt = 0;//跳跃步数
            if(nums.size() == 1) return 0;
            for (int i = 0; i 
                cover_next_max = max(cover_next_max, i + nums[i]); //更新多跳一步,从新位置可以到达的最远范围
                if(cover_next_max = nums.size()-1) return ++cnt; //若可以到达,说明的确只需要跳一步就到达终点,返回当前cnt++即可
                if(i == cover_now){ //说明跳当前cnt步,无论如何都到不了终点
                    cnt ++; //必须至少多跳一步
                    cover_now = cover_next_max;  //更新当前cnt所能覆盖的最远范围
                }
            }
            return cnt;
        }
    };
    

    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]