LeetCode hot100-78

https://leetcode.cn/problems/jump-game/description/?envType=study-plan-v2\&envId=top-100-liked

java 复制代码
55. 跳跃游戏
中等
相关标签
相关企业
给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。

贪心算法,第一次做做不出来我原谅自己。看着代码多么简洁啊。官方分析也写得挺好的。注意下为什么要写if(i<=rightmost)因为比如这个例子nums =

3,2,1,0,4\]。到数字0那里不应该往后走了的,因为前面的那几个数字最多只走到0那里,如果不加限制条件就会直接往后循环,肯定能走到最后啊。 官方分析如下 ```java 设想一下,对于数组中的任意一个位置 y,我们如何判断它是否可以到达?根据题目的描述,只要存在一个位置 x,它本身可以到达,并且它跳跃的最大长度为 x+nums[x],这个值大于等于 y,即 x+nums[x]≥y,那么位置 y 也可以到达。 换句话说,对于每一个可以到达的位置 x,它使得 x+1,x+2,⋯,x+nums[x] 这些连续的位置都可以到达。 这样以来,我们依次遍历数组中的每一个位置,并实时维护 最远可以到达的位置。对于当前遍历到的位置 x,如果它在 最远可以到达的位置 的范围内,那么我们就可以从起点通过若干次跳跃到达该位置,因此我们可以用 x+nums[x] 更新 最远可以到达的位置。 在遍历的过程中,如果 最远可以到达的位置 大于等于数组中的最后一个位置,那就说明最后一个位置可达,我们就可以直接返回 True 作为答案。反之,如果在遍历结束后,最后一个位置仍然不可达,我们就返回 False 作为答案。 ``` ```java class Solution { public boolean canJump(int[] nums) { int rightmost=0; int length = nums.length; for(int i=0;i=length-1){ return true; } } } return false; } } ```

相关推荐
COOCC114 分钟前
激活函数全解析:定义、分类与 17 种常用函数详解
人工智能·深度学习·神经网络·算法·机器学习·计算机视觉·自然语言处理
林下清风~23 分钟前
力扣hot100——347.前K个高频元素(cpp手撕堆)
算法·leetcode·职场和发展
小雅痞26 分钟前
[Java][Leetcode middle] 238. 除自身以外数组的乘积
java·leetcode
进击的小白菜1 小时前
Java回溯算法解决非递减子序列问题(LeetCode 491)的深度解析
java·算法·leetcode
-一杯为品-2 小时前
【深度学习】#11 优化算法
人工智能·深度学习·算法
-qOVOp-3 小时前
zst-2001 上午题-历年真题 计算机网络(16个内容)
网络·计算机网络·算法
Swift社区3 小时前
涂色不踩雷:如何优雅解决 LeetCode 栅栏涂色问题
算法·leetcode·职场和发展
冠位观测者3 小时前
【Leetcode 每日一题】2900. 最长相邻不相等子序列 I
数据结构·算法·leetcode
努力写代码的熊大3 小时前
链表的中间结点数据结构oj题(力扣876)
数据结构·leetcode·链表
真的没有脑袋3 小时前
概率相关问题
算法·面试