LEETCODE 55. Jump Game

LEETCODE 55. Jump Game

贪心算法

题目要求

给出一个非负整数数组,每个元素代表在当前位置能往前跳的最大步数,判断能否跳到这个数组的最后。

用一个例子理解:

A = [2,3,1,1,4], return true.

元素23114
index01234

就是说在index=0的时候,最大步数是2,index可以+0,+1,+2;数组要跳到数组的最后只需要保证有一种跳转方案的步数和是大于等于数组长度。如果没有一种方案满足这个最低要求则无法跳到数组最后。

解题思路

每次迭代根据当前迭代的左界和右界,计算得到下一次迭代的右界,下一次的左界就是当前迭代的右界,只要计算得到右界是大于数组长度的就可以停止迭代,这时说明已经找到可以跳到数组最后的方案了,返回true;或者下一次迭代的右界并没有在当前迭代右界的右边,说明这时已经跳到了可以到达的最远处,而且小于数组长度,说明无法跳到数组最后,返回fase。

代码

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int endInd = int(nums.size()), leftInd = 0, rightInd = 1;
        while (rightInd < endInd) {
            int newRightInd = rightInd;
            for (int i = leftInd; i < rightInd; i++) {
                //cout << i << endl;
                if (i + nums[i] >= newRightInd) {
                    newRightInd = i + nums[i] + 1;
                }
            }
            if (newRightInd <= rightInd) {
                break;
            }
            leftInd = rightInd;
            rightInd = newRightInd;
            //cout << leftInd << " " << newRightInd << endl;
        }
        return rightInd >= endInd;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值