Jump Game-Leetcode

        这题仍然是考察算法和思路的,有思路了实现并不难。

class Solution {
public:
    /*
    若∃ index < nums.size()-1, 使index+nums[index] >= nums.size()-1,意味着只要能到达第index个元素,就可以通过这个元素到达第
    nums.size()-1个元素,此时,我们只需考虑能否从前面的元素到达第index个元素。据此逆序迭代,找到最小的出发点,判断下标是否为0即可。
    */
    bool canJump(vector<int>& nums) {
        
        int min_index = nums.size()-1;
        
        for(int i = nums.size()-2; i >= 0; --i) 
        {
            if(i+nums[i] >= min_index) 
            {
                min_index = i;
            }
        }
        
        return min_index==0;
    }
};


        若想能到达第i个元素,则必须∃ index < i, 使index+nums[index] >= i;当存在这样的index后,当且仅当能到达第index个元素,才能到达第i个元素(若能到达第index个元素之后的元素,则必能到达第index元素;反之,若连第index个元素都不能到达,则其后的元素更到达不了,所以此时只需考虑第index个元素),我们再将第index个元素设为目标,再在其之前的元素里查找是否有能够到达第index个元素的元素,而不关心初始目标--第i个元素了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值