力扣第55题

一、题目:55. 跳跃游戏
跳跃游戏
二、题目解析:

题目解析:该题有多种解法,这里以贪心为例。
如果数组中都是大于0的数,则无论怎么跳都可以到达最后一个位置,但是当数组中包含数字0的时候,如果跳到0,则无法往前跳了,如果>越过0,就可以继续向前跳,改题难点在于最初在位置0,没有办法直观的观察出从开始依次向后的跳跃方式,是否在跳跃过程中可以越过>数组中的0。
解题步骤:

  1. 定义一个数组jump,保存每个位置可以到达的最远位置
  2. 定义一个变量maxJump,保存当前可以到达的最远位置,初始化为jump[0]
  3. while循环遍历jump同时要满足当前元素小于等于可以到达的最远位置,如果发现当前元素可达的最远位置大于maxJump,则更新maxJump,同时index++
  4. 最后如果当前元素可以遍历到jump的最后一个元素,则返回true

图示帮助理解:

在这里插入图片描述
三、代码如下:

public boolean canJump(int[] nums){
        int[] jump = new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            //初始化jump数组保存当前元素可以到达的最远位置
            jump[i] = i+nums[i];
        }
        //存储当前所在位置
        int index = 0;
        //记录当前元素可以跳跃的最远位置,初始化为jump[0]
        int maxJump = jump[0];
        //注意循环条件:index达到数组尾部,或者超过maxJump时,循环结束
        while (index<jump.length && index<=maxJump){
            if(jump[index]>maxJump){
                //如果可达到的最远距离maxJump小于jump[index],则将maxJump更新
                maxJump = jump[index];
            }
            index++;
        }
        //说明有解
        if(index==jump.length){
            return true;
        }
        return false;
    }

四、测试
55

五、结束

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Run,boy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值