大纲
示例
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>### 实现```javascriptvar 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;};
