55. 跳跃游戏

给定一个非负整数数组 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 * 104
0 <= nums[i] <= 105
通过次数602,316提交次数1,379,313

方法一:贪心

复制代码
 1 /**
 2  * @param {number[]} nums
 3  * @return {boolean}
 4  */
 5 var canJump = function(nums) {
 6     //长度为1.直接就是终点
 7 if(nums.length===1) return true;
 8 //能覆盖的最远距离
 9 let cover = nums[0];
10 for(let i=0;i<=cover;i++){
11     //当前覆盖距离cover和当前位置加能跳跃的距离中取一个较大者
12     cover=Math.max(cover,i+nums[i]);
13     if(cover>=nums.length-1){
14         //覆盖距离超过或者等于nums.length-1,说明能达到终点
15            return true;
16     }
17 }
18 //循环完成后,还没返回true就是不能达到终点
19 return false;
20 };
复制代码

时间复杂度:O(n)

空间复杂度:O(1)

posted @   icyyyy  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示