【leetcode】55. Jump Game 数组跳转是否可以到达末节点

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
    原文地址: https://segmentfault.com/a/1190000007357697
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞