大纲
示例
nums = [2,3,1,1,4]
2
跳到最后一个位置的最小跳跃数是 2。
从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置
思路
- 在跳跃距离内,记录每次跳跃时可获得的最远距离
- 记录每次最长跳跃时,次数加一次,判定的下标重新赋值成最远距离
- 每次遍历判断当前的下标是否与上次增加次数时的下标相同,如果相同,就执行2
- 只遍历到数组的最后第二个位置,不然跳跃的次数会多一次
解释
```javascript nums = [2, 3, 1, 1, 4]
// 第一次遍历 // 下标为0,跳跃距离为2 distance = 0 + 2 // 第一次跳跃时,记录下结束的位置 endIndex = 2; // 跳跃次数加1 step = 1
// 第二次遍历 // 下标为1,跳跃距离为3 // 当前跳跃距离比上次记录的2要大,所以取最大跳跃距离4 distance = 1 + 3
// 第三次遍历 // 下标为2,跳跃距离为1 // distance = 2 + 1 // 但是此次跳跃距离还是小于上次跳跃距离,所以distance还是4 // endIndex已经来到了需要判断的时候 if (endIndex === i) { endIndex = 4 step += 1 }
// 此时跳跃距离已经达到了数组长度,可以直接退出遍历
<a name="UE25K"></a>
### 实现
```javascript
var jump = function(nums) {
let endIndex = distance = step = 0;
const len = nums.length;
for (let i = 0; i < len - 1; i++) {
distance = Math.max(distance, nums[i] + i);
if (endIndex === i) {
endIndex = distance;
step++;
}
if (endIndex >= len) {
break;
}
}
return step;
};