leetcode-55 Jump Game 最远距离问题

本文介绍了一个经典的算法问题——跳跃游戏。通过分析问题背景,给出了一种高效解决方案,并附带详细代码实现。该算法利用一个变量记录可达最远位置,逐步更新最远可达距离,判断是否能到达数组末尾。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

Given an array ofnon-negative integers, you are initially positioned at the first index of thearray.

Each element in the arrayrepresents your maximum jump length at that position.

Determine if you are ableto reach the last index.

For example:
A = 
[2,3,1,1,4], return true.

A = [3,2,1,0,4], return false.

 

 

问题分析:

如:[3, 1, 2, 4, 0 ,1]

遍历数组,使用一个变量reach来记录数组所能达到的最远距离位置;

对于每一个位置,其可能达到的最远位置为i+nums[i];

因此,每走一步,只取最终最远的距离,如果前面能走到的距离比当前位置i所能到达的位置更远,则取前面的reach;如果i所能达到的最远距离比reach要远,则取i所能覆盖的距离为最新的reach;

不可达情况,即为走到的i位置,reach范围也就是前面所能达到的最远距离并未覆盖到i点,则表示不可达;这个一般发生在nums[i]=0的情况。

 

代码:

public class Solution {
    public boolean canJump(int[] nums) {
        int i = 0;
        int n = nums.length;
        for (int reach = 0; i < n && i <= reach; ++i)
            reach = Math.max(i + nums[i], reach);
        return i == n;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值