• 力扣第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;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    四、测试
    55

    五、结束

  • 相关阅读:
    【字符串】有序队列 排序
    Vue3管理后台项目使用高德地图选点
    CSS的含义和作用:优化网页外观的编程语言
    Redis进阶
    Go 如何对多个网络命令空间中的端口进行监听
    面试官:为什么忘记密码要重置而不是告诉你原密码?
    Boost搜索引擎
    机器学习【线性回归算法1】
    sql中COALESCE函数详解
    Origin绘制折线图
  • 原文地址:https://blog.csdn.net/qq_39939541/article/details/128021338