跳跃游戏(力扣)贪心 JAVA

news/2024/11/29 22:41:23/

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

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

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

示例 1:

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

示例 2:

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

提示:

1 <= nums.length <= 3 * 10^4
0 <= nums[i] <= 105

解题思路:

在这里插入图片描述

4.题目的数据范围是10^4,显然 O(n)时间复杂度的算法比教合理

5.典型的贪心问题,核心在于当前格子能跳跃的最远距离以内的点都能作为起跳点,但我们只需记录最优距离即可

maxjump = max(maxjump , i + jump[i])

朴素代码:

class Solution {public boolean canJump(int[] nums) {int len = nums.length;int maxjump = 0;for(int i = 0; i < len; i ++) {if(i > maxjump) return false;//所有起跳点都跳不到i,则返回falsemaxjump = Math.max(maxjump, i + nums[i]);//更新}return true;}
}

在这里插入图片描述

优化代码:

即某个点能直接跳到最后一个点,哪就没必要继续更新了

class Solution {public boolean canJump(int[] nums) {int len = nums.length;int maxjump = 0;for(int i = 0; i < len && maxjump < len - 1; i ++) {if(i > maxjump) return false;//所有起跳点都跳不到i,则返回falsemaxjump = Math.max(maxjump, i + nums[i]);//更新}return maxjump >= len - 1;}
}

在这里插入图片描述

逆推代码:

无非从后往前跳,看能否跳到第一个位置。以本点前方所有点为跳台,只要能有一个点能跳到本点,那就更新 last

class Solution {public boolean canJump(int[] nums) {int n = nums.length - 1;int last = n;for(int i = n - 1; i >= 0; i --) {if(i + nums[i] >= last) last = i;}return last == 0;}
}

在这里插入图片描述

在这里插入图片描述

当然从后往前跳当然也是跳的越远越好,所以last会选择最小的更新


http://www.ppmy.cn/news/778436.html

相关文章

【通览一百个大模型】Anthropic LLM(Anthropic)

【通览一百个大模型】Anthropic LLM&#xff08;Anthropic&#xff09; 作者&#xff1a;王嘉宁&#xff0c;本文章内容为原创&#xff0c;仓库链接&#xff1a;https://github.com/wjn1996/LLMs-NLP-Algo 订阅专栏【大模型&NLP&算法】可获得博主多年积累的全部NLP、大…

手机收不到短信了

手机收不到短信原因可能是多方面。 解决方案 1、重启机器试下&#xff0c;因为有可能是没有识别出来。 2、看下机器的设置&#xff0c;是否设置了屏蔽消息。 3、欠费的话&#xff0c;会受到欠费提醒短信。 不交费的话&#xff0c;之后可能就收不到短信了。 4、上述办法都不行…

针对小米手机收不到推送的解决方案

小米其实针对这个做了很有针对性的解决方案。目前团队已经切换到小米推送 参考文档&#xff1a;http://dev.xiaomi.com/doc/p6421/index.html 转载于:https://www.cnblogs.com/shansheng/p/4760293.html

小米推送 收不到回执

我遇到的问题&#xff1a; 消息推送了出去&#xff0c;但是设置的消息回执没有被调用。之前都有被调用&#xff0c;但由于回执接口定义有问题&#xff0c;提示406错误&#xff0c;于是我修复了下&#xff0c;结果现在直接连调用都没有了。 这是我有问题的代码&#xff1a; pub…

小米手机短信拦截转发失败原因

小米手机短信拦截转发失败原因,小米手机短信拦截转发失败原因 短信的设置里面有个“系统短信优先”&#xff0c;要把这个关闭才能你的程序才能正常监听到短信。

android手机收不到彩信,小米4手机收不到彩信是什么原因?小米4彩信设置教程

最近有网友问小编&#xff1a;小米4收不到彩信怎么回事&#xff1f;好友给我小米4手机发了一条彩信&#xff0c;但是迟迟没有收到&#xff0c;这是怎么回事&#xff1f;这种问题&#xff0c;其实主要是移动网络设置的问题&#xff0c;对于一些玩机大神来说&#xff0c;小菜一碟…

关于小米手机使用广播无法接受短信的问题

最近学习android时在学到手机应用使用广播监听短信并读取短信内容时&#xff0c;出现了无法监听到短信的问题。 我使用的测试机是小米2&#xff0c;最初以为是广播注册的问题&#xff0c;可是检查代码并改成静态注册也无济于事&#xff0c;于是想到可能是手机问题。 于是我换同…

小米推送的那些坑 :有的手机能收到推送,有的收不到,通知栏只能显示一个。。。。。

前提&#xff1a;产品投放于国外市场&#xff0c;投放于Google Paly,开发在国内。运营只需要在小米控制台进行小米推送&#xff0c;不需要服务器配合。 遇到问题&#xff1a; ①&#xff08;一开始对接问题&#xff09; 一直不展示通知消息 ② 在通知栏只展示一条通知信息 ③ 小…