python
class Solution:
def jump(self, nums: List[int]) -> int:
n = len(nums)
res, furthest = 0, 0
end = 0
for i in range(n-1):
furthest = max(i + nums[i], furthest)
if i == end:
end = furthest
res += 1
return res
c++
class Solution {
public:
int jump(vector<int>& nums) {
// 思路: 在每一个位置,审视能跳到的所有位置,选择里面继续跳能跳的最远的那个位置,作为下一个位置。
int farest = 0; // 增加一次跳跃后,可以到达的最远位置
int end = 0; // 不增加跳跃次数的情况下,可以到达的最远位置
int res = 0;
for (int i = 0; i < nums.size()-1; i++) {
farest = max(farest, i + nums[i]);
// i到达end前,都是跳一步,到达end时,必须得再跳一步才能前进了
if (i == end) {
res++;
end = farest;
}
}
return res;
}
};