45

给定一个非负整数数组,最初定位在数组的第一个索引处,数组中的每个元素表示在该位置的最大跳转长度,以最小跳跃次数到达最后一个索引。

算法的思路是在争取每跳最远的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
};

你可能感兴趣的:(45)