本文最后更新于609 天前,其中的信息可能已经过时,如有错误请发送邮件到tomding1065@gmail.com
https://programmercarl.com/0045.%E8%B7%B3%E8%B7%83%E6%B8%B8%E6%88%8FII.html
1.其实这个题给我的感觉有点混乱,这个题也是判断覆盖范围最终有没有>=终点位置,遍历整个数组,分别记录最大下一次next可以覆盖的最大值,当遍历到当前cur的最大覆盖距离的时候就更新cur检查此时的cur是否可以覆盖的>=终点位置,期间每次遍历到cur的最后位置且不是终点位置res++。我觉得本题的思路最重要的地方在于分清楚cur next所代表的意义他们是下标, for循环在进行遍历,然后if语句在进行每一次的cur更新以及结果的收集。
CPP
class Solution {
public:
int jump(vector<int>& nums) {
int cur = 0;
int next = 0;
int res = 0;
if(nums.size() == 1)return 0;
for(int i = 0; i < nums.size(); i++){
next = max(nums[i] + i, next);
if(i == cur){
res++;
cur = next;
if(cur >= nums.size() - 1)break;
}
}
return res;
}
};