【leetcode】45.跳跃游戏 II

57 阅读1分钟

leetcode-45.png

贪心算法

55题的基础上进行了细化,返回需要的步数。

  • currentEnd:表示当前跳跃范围的终点,即在当前跳跃次数内能够到达的最远位置。
  • farthest:表示从当前位置 i 能够跳跃到的最远位置,即在遍历过程中动态更新的最远可达位置。

对于第55题的思考
如果数组里面不存在0的话,那么肯定会到达终点,那么怎样才能最小的步数,那就是在遍历的过程中,每次都试探到最远距离即可
需要记录当前的终点即可,如果当前遍历到的地方等于记录的最远终点,也就是第8行,那么就可以更新最远的终点(第9行)

var jump = function (nums) {
    if(nums.length === 1) return 0
    let farthest = 0
    let currentEnd = 0
    let step = 0
    for (let i = 0; i < nums.length; ++i) {
        farthest = Math.max(farthest, i + nums[i])
        if (i === currentEnd) {
            currentEnd = farthest
            step++
            if (currentEnd >= nums.length - 1) {
                return step
            }
        }
    }
};