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;
}
此文章已被阅读次数:正在加载...更新于