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

测试:

    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();
    }
true
true

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


总结

提示:重要经验:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冰露可乐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值