传送门
(参考官方题解)
更新每个点对应能够跳到的最大位置
[2,1,3,2,2,4]
第一次查询能够到达1和2的位置,更新数据,到达1位置时,不用更新maxpos,同时也没有到达end,不用更新数据,到达2位置时,2+3=5,此时出现最大值,更新maxpos,同时也到达之前的end,因此更新end,发现end已经到达最后,跳出循环
class Solution {
public:
int jump(vector<int>& nums) {
int ans=0;
int end=0;
int maxpos=0;
for(int i=0;i<nums.size()-1;i++){
if(maxpos>=i){
maxpos=max(maxpos,i+nums[i]);
if(i==end){
end=maxpos;
ans++;
if(end==nums.size()-1) break;
}
}
}
return ans;
}
};