贪心算法问题-LeetCode 5545(贪心算法,跳跃问题)

Posted 算法工程师之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贪心算法问题-LeetCode 5545(贪心算法,跳跃问题)相关的知识,希望对你有一定的参考价值。


重磅干货,第一时间送达

作者:TeddyZhang,公众号:算法工程师之路

贪心算法问题:LeetCode #55 #45

1
编程题

【LeetCode #55】跳跃游戏

给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个位置。

示例 1:

输入: [2,3,1,1,4]
输出: true
解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。
示例 2:

输入: [3,2,1,0,4]
输出: false
解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位> > 置。

算法原理:
遍历整个nums数组,每次计算从i位置的最大可能到达的距离,然后依次更新这个最大值,如果最大值大于nums的大小nums.size(),那么就返回true, 否则返回false.

其中i的范围是:小于nums.size()同时还要小于从当前位置i可以到达的距离。这就是正常人取求解这个问题的思路,很容易想到的!

C++代码:

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int maxReach = 0;
        for(int i =  0;i < nums.size() && i <= maxReach; i++){
            maxReach = max(maxReach, i+nums[i]);
        }
        if(maxReach < nums.size()-1){
            return false;
        }
        return true;
    }
};

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/jump-game

【LeetCode #45】跳跃游戏II

给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

示例:

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

假设你总是可以到达数组的最后一个位置

算法原理:
由于题目中规定总能到达数组的最后一个位置,因此我们在遍历数组时每次都要去找最大的跳跃位置,只有到达了这个最远的边界end,我们才让step进行自加,同时更新最远的边界end为最远可以跳跃的位置。

如下图,开始的位置是 2,可跳的范围是橙色的。然后因为 3 可以跳的更远,所以跳到 3 的位置。

贪心算法问题-LeetCode 55、45(贪心算法,跳跃问题)

如下图,然后现在的位置就是 3 了,能跳的范围是橙色的,然后因为 4 可以跳的更远,所以下次跳到 4 的位置。

贪心算法问题-LeetCode 55、45(贪心算法,跳跃问题)

class Solution {
public:
    int jump(vector<int>& nums) {
        int end = 0;
        int maxReach = 0;
        int step = 0;
        for(int i = 0;i < nums.size()-1;i++){
            maxReach = max(maxReach, nums[i] + i);
            if(i == end){
                end = maxReach;
                step++;
            }
        }
        return step;
    }
};

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/jump-game-ii

2
资源分享


欢迎关注我的个人公众号 (算法工程师之路),公众号内有大量视频资料和电子书资料以及算法笔记,回复关键字即可获取!

号外,算法刷题二群已经建立,但由于邀请人数超出限制,无法扫码添加,可以加号主微信(Leopard7319538)说明来意,可以加入到算法刷题群,每天2道编程题3道概念题,我们一起坚持下去!!!

贪心算法问题-LeetCode 55、45(贪心算法,跳跃问题)


更多精彩推荐,请关注我们
在看点这里

以上是关于贪心算法问题-LeetCode 5545(贪心算法,跳跃问题)的主要内容,如果未能解决你的问题,请参考以下文章

leetcode之贪心算法刷题总结2

leetcode之贪心算法刷题总结4

leetcode之贪心算法刷题总结5

贪心算法-LeetCode 134111(递归算法,异或性质,贪心)

贪心算法-LeetCode 121122(深浅拷贝,贪心思路)

LeetCode日记——算法贪心思想专题