原文:45. 跳跃游戏 II(力扣 面试题) - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/leetcode/leetcode-javascript-solution-045/

题目:

难度:Hard

相关话题:贪心算法数组

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

示例:

输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
    从下标为 0 跳到下标为 1 的位置,跳1步,然后跳3步到达数组的最后一个位置。

说明:

假设你总是可以到达数组的最后一个位置。


思路:

贪心算法,定义一个变量maxRange表示每一个位置能跳到的最大位置,定义变量rangeEnd表示当前能跳到最大的位置,遍历nums不断更新maxRange, 当i===rangeEnd,更新rangeEnd为最新的maxRange,表示当前这一段能跳的最远距离。

/**
 * @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
 * @介绍:JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容
 * @param {number[]} nums
 * @return {number}
 */
var jump = function (nums) {
  if(nums.length<=1)return 0
  let maxRange=nums[0]
  let rangeEnd=nums[0]
  let step=1
  for(let i=0;i<nums.length-1;i++){
    maxRange=Math.max(maxRange,nums[i]+i)
    if(i===rangeEnd){
      rangeEnd=maxRange
      step++
    }
  }
  return step
};

扩展阅读: