1. 题目

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.

2. 思路

遍历记录下当前能到达的最远的位置,如果能到达n,则一定能达到<n的任何位置
如果当前能到达的位置小于当前的下标,则说明走不下去了,提前中断退出。
第一个点时起点,一定可以达到,先加入进去。
遍历完成之后,看能到达的位置是否覆盖了末节点的位置。

3. 代码

耗时:12ms

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int overflow = 0; // 当前可以覆盖到的下标
        for (int i = 0; i < nums.size() - 1; i++) {
            if (overflow < i) { return false; }  // 提前中断, 走不下去了
            int k = i + nums[i];
            if (k > overflow) { overflow = k; }
        }
        return overflow >= nums.size() - 1;
    }
};

knzeus
72 声望28 粉丝

行万里路,读万卷书