力扣55跳跃游戏(动态规划)

public class Solution {
    // 定义一个名为canJump的方法,用于判断是否能够从数组的起始位置跳到最后一个位置
    public boolean canJump(int[] nums) {
        // 获取数组的长度
        int n = nums.length;
        // 初始化最远可以到达的位置为0
        int rightmost = 0;
        // 遍历数组中的每个元素
        for (int i = 0; i < n; ++i) {
            // 如果当前索引i在最远可以到达的位置范围内
            if (i <= rightmost) {
                // 更新最远可以到达的位置为当前位置加上可以跳跃的最大步数与当前最远位置中较大的一个
                rightmost = Math.max(rightmost, i + nums[i]);
                // 如果更新后的最远位置大于或等于数组的最后一个索引,说明可以到达最后一个位置
                if (rightmost >= n - 1) {
                    return true; // 返回true,表示可以跳到最后一个位置
                }
            }
        }
        // 如果遍历结束还没有到达最后一个位置,则返回false
        return false;
    }
}

例子:

[2, 3, 1, 1, 4]
  • 我们一开始在位置 000,可以跳跃的最大长度为 222,因此最远可以到达的位置被更新为 222;
  • 我们遍历到位置 111,由于 1≤21 \leq 21≤2,因此位置 111 可达。我们用 111 加上它可以跳跃的最大长度 333,将最远可以到达的位置更新为 444。由于 444 大于等于最后一个位置 444,因此我们直接返回 True。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值