题目
45. 跳跃游戏 II
思路
- 从0起跳,但是只要最远能跳的位置不到最后一个,那就肯定需要跳一步。在这个过程中,记录这个区间段能跳的最远距离nextDistance
- 为什么不需要分段重新计算nextDistance?因为跳到某个位置后(也就是跳到上一次的nextDistance,之后的nextDistance一定会比现在这个位置能到达的位置远,比如你跳到了第四个位置,上次的nextDistance是4,之后的nextDistance一定比4大,因为你已经跳到4并且这个数组一定能到达最后)
- 在某个区间遍历完成后,也就是i走到了目前跳到了目前的区间端点,也就是i = curDistance,更新位置到这个区间段的位置到nextDistance,步数加一
- 注意,curDistance并不是跳到的位置,只是一个区间的端点。比如[2,3,1,1,4]从2跳到了2位置的话是1, curDistance = 1,但实际上我们肯定会先跳到第一个位置,也就是3在的地方。
代码
var jump = function(nums) {
let curIndex = 0
let nextIndex = 0
let steps = 0
for(let i = 0; i < nums.length - 1; i++) {
nextIndex = Math.max(nums[i] + i, nextIndex)
if(i === curIndex) {
curIndex = nextIndex
steps++;
}
}
return steps
};