leetcode 45 跳跃游戏II

在这里插入图片描述

原题链接

  1. 与普通跳跃游戏不同,此题限制了最小的跳跃步数
  2. 定义了本次跳跃的end位置,也是下次起跳的位置
  3. 在for循环里,i 要满足 i < length - 1而不是 i < length;因为若i < length 则有可能i为数组的最后一个位置,这时统计的是数组的最后一个位置,这样函数就会越界。
  4. 在for循环内不断更新最大起跳位置,当i == end 的时候,将end 更新为当前能跳到的最远位置,然后steps++
  5. **二刷:**此题与上一题不同的是,上一题要求返回能否到达最后的位置,而此题要求返回到达最后的位置所需要几步?
  6. 关键位置是 在for循环的时候,要求 i < nums.length - 1 即 i 是不能达到倒数第二个位置的
  7. 当发现 i 与end 相等的时候, 则步数加一,同时给end 赋予新值
  8. 其中end的含义是:上次跳远能到达的最大位置,maxPosition的含义是,当前能跳到的最大位置。
  9. 设计的流程 for循环,当i 是不达到倒数第一个位置的时候,不断记录maxPosition,若当前的 i 覆盖了上一次的end 位置,则步数++,更新end
class Solution {
    public int jump(int[] nums) {
        int end = 0;
        int maxPosition = 0;
        int steps = 0;
        for(int i = 0; i < nums.length - 1; i++){
            maxPosition = Math.max(maxPosition, i + nums[i]);
            if(i == end){
                steps++;
                end = maxPosition;
            }
        }
        return steps;
    }
}




class Solution {
    public int jump(int[] nums) {
        int length = nums.length;
        int end = 0;// 上次跳跃可达范围右边界(下次的最右起跳点)
        int maxPosition = 0; // 目前能跳到的最远位置
        int steps = 0; // 跳跃次数
        //如下的 i < length - 1是关键位置,不能使得i < length
        for (int i = 0; i < length - 1; i++) {
            maxPosition = Math.max(maxPosition, i + nums[i]); 
             // 到达上次跳跃能到达的右边界了
            if (i == end) {
                 // 目前能跳到的最远位置变成了下次起跳位置的右边界
                end = maxPosition;
                // 进入下一次跳跃
                steps++;
            }
        }
        return steps;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值