55. Jump Game

55. Jump Game


Given an array of non-negative integers, you are initially positioned at the first index of the array.

Each element in the array represents your maximum jump length at that position.

Determine if you are able to reach the last index.

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

A = [3,2,1,0,4], return false.

题目大意

给定一个数组,数组中的每个元素表示当前位置能前进的最大步数,最开始时从数组第一个位置起步,判断能否到达最后一个位置。

解题思路

使用贪心的方法寻找右边界,认为凡是位于右边界左边的位置都是可访问的。
每次通过比较当前位置所能达到的最远位置和当前的右边界,来选出新的右边界。
在当前位置大于右边界时,结束寻找右边界。
最后,比较右边界和终点,得出结果。

细节:
最后右边界需要加一,因为终点的值dst是从1开始计数的。

算法复杂度

O(n)

代码实现

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int dst = nums.size();
        int rightBound = 0;
        for (int i = 0; i < dst; i++) {
            if (i > rightBound) { break; }
            rightBound = max(i+nums[i], rightBound);
        }
        return rightBound+1 >= dst;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值