leetcode-55 Jump Game 最远距离问题

问题描述:

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;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值