LeetCode【跳跃游戏】

55. 跳跃游戏

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。

示例 1:

输入:nums = [2,3,1,1,4]
输出:true
解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。

示例 2:

输入:nums = [3,2,1,0,4]
输出:false
解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。

这道题的思路就是每一次循环记录当前状态下能够达到的最右侧的的坐标,当这个最大值大于等于数组中最有一个元素的位置时(其实也就是数组长度-1(因为数组的下标从0开始))说明可以达到最后一个坐标输出true,否则输出false

class Solution {

    // 方法用于确定是否可以跳到数组的最后一个索引
    public boolean canJump(int[] nums) {
        int position = nums.length; // nums数组的长度
        int r = 0; // 初始化最大可达索引

        // 遍历数组
        for (int i = 0; i < position; i++) {
            // 更新最大可达索引
            r = Math.max(r, i + nums[i]);

            // 如果最大可达索引大于或等于最后一个索引
            // 返回true,表示可以达到最后一个索引
            if (r >= position - 1) {
                return true;
            }
        }

        // 如果无法达到最后一个索引
        return false;
    }

}
  1. 类和方法声明:

    • class Solution {: 定义了一个名为 Solution 的类。
    • public boolean canJump(int[] nums) {: 定义了一个公共方法 canJump,接受一个整数数组 nums 作为输入,并返回一个布尔值。
  2. 变量初始化:

    • int position = nums.length;: 存储了数组 nums 的长度,即最后一个索引加一。
    • int r = 0;: 将 r 初始化为0。用于记录最大可达索引。
  3. For循环解释:

    • for (int i = 0; i < position; i++) {: 遍历数组中的每个索引。
  4. 更新最大可达索引:

    • r = Math.max(r, i + nums[i]);: 更新 r,使其成为当前值和索引 i 加上跳跃距离 nums[i] 的最大值。这计算了从当前位置 i 能够到达的最远索引。
  5. 检查是否能达到最后一个索引:

    • if (r >= position - 1) {: 检查 r 是否大于或等于最后一个索引 (position - 1)。如果是,则表示从当前位置 i 可以达到最后一个索引,返回 true
  6. 返回结果:

    • return false;: 如果循环完成后 r 没有达到最后一个索引,返回 false,表示无法达到最后一个索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值