给定一个非负整数数组,最初定位在数组的第一个索引处,数组中的每个元素表示在该位置的最大跳转长度,以最小跳跃次数到达最后一个索引。
算法的思路是在争取每跳最远的greedy,这道题只让求跳数,不关注跳法。
扫描数组,确定当前最远能覆盖的节点,存为l,然后继续扫描,直到当前的路程超过了上一次算出的覆盖范围,同时更新跳数。
/**
* @param {number[]} nums
* @return {number}
*/
var jump = function(nums) {
var step = 0
var l = 0
var next = 0
for(var i = 0; i < nums.length - 1; i++){
l = Math.max(l, i + nums[i])
if(i === next){
step++
next = l
}
}
return step
};