• LeetCode高频题55. 跳跃游戏


    LeetCode高频题55. 跳跃游戏

    提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目
    互联网大厂们在公司养了一大批ACM竞赛的大佬们,吃完饭就是设计考题,然后去考应聘人员,你要做的就是学基础树结构与算法,然后打通任督二脉,以应对波云诡谲的大厂笔试面试题!
    你要是不扎实学习数据结构与算法,好好动手手撕代码,锻炼解题能力,你可能会在笔试面试过程中,连题目都看不懂!比如华为,字节啥的,足够让你读不懂题
    在这里插入图片描述
    本题!是互联网大厂考过的笔试原题,202204月的笔试,好像是京东还是字节考的,我忘了
    本题!是互联网大厂考过的笔试原题,202204月的笔试,好像是京东还是字节考的,我忘了
    本题!是互联网大厂考过的笔试原题,202204月的笔试,好像是京东还是字节考的,我忘了


    题目

    给定一个非负整数数组 nums ,你最初位于数组的 第一个下标

    数组中的每个元素代表你在该位置可以跳跃的最大长度。

    判断你是否能够到达最后一个下标。


    一、审题

    示例 1:

    输入:nums = [2,3,1,1,4]
    输出:true
    解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。
    示例 2:

    输入:nums = [3,2,1,0,4]
    输出:false
    解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/jump-game
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


    二、解题

    最大可以跳最大[i]个步数
    怎么跳,随意

    在这里插入图片描述
    可以随意选走几步

    最后能不能跳到N-1位置呢???

    来到每一个位置i,它能在当前跳到的最远位置是?
    i+[i]就是每次i达到的max【能到i就要更新,看看当前这个右边界max更大,就更新】

    注意:中途你发现i压根来不了这个max【i>max】,false
    在这里插入图片描述
    当你来到i=4时,max=i+[i]=4+0=4
    下一步你到i=5,发现i>max,说明你曾经压根没法跳到这里来,返回false

    当i=N-1,就成功了!!!
    说明中途一直没失败!!

    手撕代码:

    class Solution {
        public boolean canJump(int[] nums) {
            //复习:
            //来到每一个位置i,它能在当前跳到的最远位置是?
            //**i+[i]就是每次i达到的max【能到i就要更新】**
            //注意:中途你发现i压根来不了这个max【i>max】,false
                if (nums == null || nums.length < 2) return true;
                int N = nums.length;
    
                int max = 0;//来到i最远的右边界
                for (int i = 0; i < N; i++) {
                    if (i > max) return false;
                    max = Math.max(max, i + nums[i]);//更新当前位置能到的最远右边界
                }
                return true;
            }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    测试:

        public static void test(){
            int[] arr = {2, 0, 0};
            Solution solution = new Solution();
            System.out.println(solution.canJump(arr));
            System.out.println(solution.canJumpReview(arr));
        }
    
        public static void main(String[] args) {
            test();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    true
    true
    
    • 1
    • 2

    LeetCode测试;
    在这里插入图片描述
    在这里插入图片描述
    本题的关键就是看看从左往右跳跃的过程中,咱们怎么选跳跃的步数
    实际上不管你咋选,我是洗完能跳得越远越好,之前你能来到i,我就有办法从i跳到更远,当你之前怎么也没法跳到i来
    就是i>maxR了,那显然不好意思,我没法从i起跳,失败了!!!


    总结

    提示:重要经验:

    1)本题的关键就是看看从左往右跳跃的过程中,咱们怎么选跳跃的步数
    实际上不管你咋选,我是洗完能跳得越远越好,之前你能来到i,我就有办法从i跳到更远,当你之前怎么也没法跳到i来
    就是i>maxR了,那显然不好意思,我没法从i起跳,失败了
    3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

  • 相关阅读:
    交换两实数的整数部分
    使用adb shell 命令接收串口发送过来的16进制数据 或者 发送16进制数据
    总结git常用命令
    python利用字典归类列表
    【毕业设计】42-基于FPGA的LCD1602控制器设计仿真与实现(原理图+仿真+源代码+论文)
    # DevOps名词定义梳理
    【vSphere 8 自签名证书】企业 CA 签名证书替换 vSphere Machine SSL 证书Ⅰ—— 生成 CSR
    Kotlin Sealed Class
    机器学习 | 模型评估和选择 各种评估指标总结——错误率精度-查准率查全率-真正例率假正例率 PR曲线ROC曲线
    在MacOS上使用NSWindow展示了多种不同风格的窗口
  • 原文地址:https://blog.csdn.net/weixin_46838716/article/details/125467238