LeetCode 55 跳跃游戏

55. 跳跃游戏

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个位置。

示例 1:

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

示例 2:

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

思路 贪心法从后往前回溯 先找末尾数组单元,然后再从末尾数组单元一一回退回溯,判断该位置能否跳到末尾数组单元 如果能跳到末尾数组单元,则继续回溯 直到回溯到单元0 如果成功 则说明可以跳跃到终点,失败则该组元素无法跳到最终点。

源代码如下:

class Solution {
public:
    bool canJump(vector<int>& nums) {
        //从后往前回溯 但是不太懂这跟贪心算法有什么关系?
        int lastPos = nums.size() - 1;
        for (int i = nums.size()-1; i >= 0; i--) {
            if (i + nums[i] >= lastPos) {
                lastPos = i;
            }
        }
        if (lastPos == 0) {
            return true;
        }
        return false;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 ...
    河海中最菜阅读 177评论 0 0
  • 关注公众号《长歌大腿》,发送“机器学习”关键字,可获取包含机器学习(包含深度学习),统计概率,优化算法等系列文本与...
    伊凡vnir阅读 599评论 0 0
  • 题目描述 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 ...
    youzhihua阅读 199评论 0 0
  • 对亲爱的你,要道一声对不起。 我还记得,彼时我所经历的那种疼痛,历久弥新。 同样是最真最纯的你,我不想任何不好的东...
    胡小萝卜呀阅读 342评论 1 1
  • ——❥❥❥ 早安 ❥❥❥—— 世界上有两个可贵的词,一个叫认真,一个叫坚持。 认真的人改变了自己,坚持的人改变了命运!
    幸运草诗云阅读 281评论 0 0