Fork me on GitHub

Leetcode55. Jump Game跳跃游戏

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

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

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

示例 1:

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

示例 2:

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

 

 

贪心

pos表示当前位置

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int len = nums.size();
        if(len == 1)
            return true;
        int pos = 0;
        while(pos < len)
        {
            if(pos + nums[pos] >= len - 1)
                return true;
            int x = nums[pos];
            int MAX = pos;
            int MAXpos = pos;
            for(int i = 1; i <= x; i++)
            {
                if(pos + i + nums[pos + i] >= len - 1)
                    return true;
                else if(pos + i + nums[pos + i] > MAX)
                {
                    MAX = pos + i + nums[pos + i];
                    MAXpos = pos + i;
                }
            }
            if(pos == MAXpos)
                return false;
            else
                pos = MAXpos;
        }
        return false;
    }
};

 

升级简化版:

去掉了重复的遍历

MAX表示到目前位置能到达的最远距离

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

 

posted @ 2018-11-21 22:53  lMonster81  阅读(93)  评论(0编辑  收藏  举报
/*评论*/ /*top按钮*/

/* 网易云控件 */