跳跃游戏1

以示例1为例,从位置0开始,可以跳到位置1,2.假设我们选择跳到位置1的话,从位置1可以跳到位置2,3,4,。而我们选择跳到位置2的话,从位置2可以跳到位置3.

可以看出位置2能跳到的位置 包含于 位置1能跳到的位置,所以我们从位置0开始跳的话,选择的将要跳的那个位置(1or2)是一个能跳到更远的位置,因为位置2能跳到的位置,位置1也能跳到,而位置1能跳的位置,位置2却跳不到。贪心思想体现在这里。

class Solution {
public:
    bool canJump(vector<int>& nums) {
        vector<int> index;//保存每个位置可以到达的最远下标位置
        for(int i =0;i<nums.size();++i)
            index.push_back(i+nums[i]);
        
        int jump = 0;//代表当前位置
        int max_jump = index[0];//代表能到的最远位置
        //当前位置还在这个下标数组(index)内,并且不超过能到达的最远位置
        while(jump< index.size() && jump<=max_jump )
        {
            if(index[jump] > max_jump)
                max_jump = index[jump];
            jump++;
        }
        if(jump == index.size() )
            return true;
        return false;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_22080999/article/details/80501079