leetcode 刷题之路 54 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.

题目给出一个数组,数组元素值表示最多可以跳跃的步数,例如位置2处的数组元素值为1,则从位置2可以到达位置1和位置3。

题目要求判断是否可以从起始位置(下标0)跳到结束位置(n-1)。

解答:

使用一个变量farthest表示位置0可以到达的最远位置,遍历数组并更新farthest,具体判断如下

当farthest小于位置i时,说明已经不能从起始位置到达位置i了,更不用说位置n-1了,直接返回false

当farthest大于等于位置i时,根据位置i上的最大跳跃步数更新farthest值,并且在每次更新完后判断farthest是否大于等于n-1,这样可以尽可能早的结束程序,不一定非得遍历完成数组后再得出结论。

AC code:

class Solution {
public:
    bool canJump(int A[], int n) 
    {
        int farthest=0;
        for(int i=0;i<n;i++)
            if(i>farthest)      //连接断了
                return false;
            else
            {
                if(i+A[i]>farthest)
                    farthest=i+A[i];
                if(farthest>=n-1)
                    return true;
            }
        }
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值