leetcode 55:跳跃游戏

首先,如果数字只有一个元素,那么必定为true

然后从后往前遍历数组,如果最后一个元素是0,则它前面的元素的值只要有一个大于等于离0的距离,则这个0是合法的,比如

2 0 0,最后一个元素前面的2的值是等于到最后一个0的距离的,所以最后一个0合法;对于不是最后一个元素是0的元素,查看它前面的元素的值是否大于到这个0的距离,只要有一个大于到该0的距离,则合法,比如2 0 0,2后面0,2到这个0的距离是1 所以2>1 这个0合法,而3 2 1 0 4来说,0前面元素的值都刚好等于到0的距离,所以这个0不合法,返回false

bool canJump(std::vector<int>& nums) {
    if(nums.size()==1)
        return true;
    int i=nums.size()-1;
    while(i>=0){
        if(nums[i]!=0)
            i--;
        else{
            int c=1;
            int j=i-1;
            for(;j>=0;j--){
                if(nums[j]>c){
                    i--;
                    break;
                }else if(i==nums.size()-1&&nums[j]==c){
                    i--;
                    break;
                }
                c++;
            }
            if(j==-1)
                return false;
        }
    }
    return true;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值