这道题其实也不算难,只是要在每一次跳跃时,判断在进行每一次跳跃所能跳跃的最大距离,然后通过循环计算在这段距离内下一次跳跃所能跳跃的最远距离,记录下当前的局部最远距离与位置值,接着更新循环的初始值(位置值)与终止值(局部最远距离),这样就能确保每一次跳跃都是最优解。
class Solution {
public:
int jump(vector<int>& nums) {
int n = nums.size(), start = 0, end = 0, count = 0, maxLen = 0;
while (end < n - 1) {
count++;
for (int i = start; i <= end; i++) {
if (i + nums[i] >= n - 1)
return count;
if (i + nums[i] >= maxLen) {
maxLen = i + nums[i];
start = i;
}
}
end = maxLen;
}
return count;
}
};