二话不说,leetcode HOT100先开干,加油冲冲冲!这次开撕的是--跳跃游戏。难度:中等
题目:给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。
/* 示例1:
输入: nums = [2,3,1,1,4]
输出: true
解释: 可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。
*/
/* 示例2:
输入: nums = [3,2,1,0,4]
输出: false
解释: 无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。
*/
思路:这道题可以使用贪心算法求解,循环中更新存入每次对应的数值能跳跃的最大值,将该值与nums.length - 1做判断即可。
答案:
var canJump = function(nums) {
const len = nums.length
let res = 0;
for(let i = 0; i < len; i++){
if(i<=res) { // 如果i>res,说明已经不够步数往前了
res = Math.max(res,i+ nums[i] ) // 当前位置对应数值能跳的最大值和前面存的最大值之间去大的一边
// 举例,[2,3,1,1,4]中,res变化为2,4 , 后续因为4>len-1,所以成功
if(res>=len - 1) return true // 如果res已经超过len-1,也就是到达数组最后一项了,则成功
}
}
return false // 未找到
};// 时间复杂度O(n)