45. 跳跃游戏 II

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。

每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:

0 <= j <= nums[i]
i + j < n
返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。

解题思路

首先给出的测试用例都可以达到数组最右边界,说明不用考虑到达不了的情况

那么可以简单的考虑,只要每次更新当前最大能到达的右边界时,步数+1 即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function jump(nums: number[]): number {
let len = nums.length;
let ans = 0;
let rightPos = 0;
let end = 0;
for(let i = 0; i < len - 1;i++) {
// 每次更新右边界
rightPos = Math.max(rightPos, i + nums[i]);
// 当遍历到end到时候,rightPos记录着目前跳跃区间内的最大值
if (i === end) {
end = rightPos;
ans++;
}
}
return ans;
};