ori维护上一起点的覆盖范围,cover维护最远覆盖。
j<=ori时,即此时j为上一起点应跳到的点。
而numsSize为1时,则在return时做特殊处理。
int jump(int* nums, int numsSize){
int cover=nums[0],step=1,j=1,ori=0;
while(cover<numsSize-1){
if(j==numsSize){
return 0;
}
if(nums[j]+j>=cover){
if(j<=ori){
cover=nums[j]+j;
}
else{
ori=cover;
cover=j+nums[j];
step+=1;
}
}
j+=1;
}
return (numsSize==1)?0:step;
}