Leetcode 55. 跳跃游戏

题目

请添加图片描述

1.边界条件处理:

首先获取数组的长度 n,如果数组长度为 1,说明已经在最后一个位置,直接返回 true。

2.初始化最大可达位置: stepmax=0;

3.遍历数组

更新最大可达位置:stepmax = max(stepmax, i + nums[i]);

对于当前位置 i,计算从该位置能够跳到的最远位置 i + nums[i],并与之前记录的最大可达位置 stepmax 比较,取较大值更新 stepmax。

意味着当前位置行动最远后 可以到达的最远位置

3.1 判断是否能到达终点:

if (stepmax >= n - 1) { return true; }

如果最大可达位置已经能够到达或超过数组的最后一个位置(即 stepmax >= n - 1),说明可以跳到最后一个位置,返回 true。

3.2判断是否无法继续前进:

if (i == stepmax) { return false; }

如果当前位置 i 等于最大可达位置 stepmax,意味着无法再向前跳跃,返回 false。

当前可移动的最远位置仍等于当前位置 就无法继续前进

4.默认返回结果

在正常情况下,遍历完整个数组后

如果没有提前返回 false,说明可以到达最后一个位置,返回 true。

不过从逻辑上来说,这行代码实际上不会被执行,因为在遍历过程中要么提前返回 true,要么提前返回 false。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值