给定一个非负整数数组 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)
标签:return,游戏,nums,55,length,跳跃,下标,true From: https://www.cnblogs.com/icyyyy/p/16789474.html