O(n),不敢相信,开始没思路,尝试简化问题倒退居然做出来了。点个赞加油。
bool canJump(int* nums, int numsSize){
if(numsSize<=1){
return true;
}
int dstIdx=numsSize-1;
int idx=numsSize-2;
bool can=false;
while(idx>=0){
if(nums[idx]>=(dstIdx-idx)){
dstIdx=idx;
can=true;
}else{
can=false;
}
idx--;
}
return can;
}
在群里同学的提醒下确实可以优化的更好看
bool canJump(int* nums, int numsSize){
if(numsSize<=1){
return true;
}
int dstIdx=numsSize-1;
int idx=numsSize-2;
while(idx>=0){
if(nums[idx]>=(dstIdx-idx)){
dstIdx=idx;
}
idx--;
}
return dstIdx==0;
}