题目:
难度: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
};
扩展阅读: