1.题目描述
给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。
2.样例描述
3.思路描述
从后往前遍历,从倒数第二开始遍历,先判断倒数第二位能否到达最后一位,若能继续向前,看前一位是否能到达后一个能到达最后一位的位置。
4.代码展示
bool canJump(int* nums, int numsSize){
if(numsSize==1) return true; //如果nums的长度为1,它都可以到达最后一位
int n=0; //建立一个判断标准---0
for(int i=numsSize-2;i>=0;i--)//开始从倒数第二位遍历,看代数第二位是否能到达最后一位,再看前一位是否能到达后一个能到达最后一位的位
{
if(nums[i]>n) //若该位置的数比n=0大,则可以到达后一位,继续遍历
{
n=0;
}
else{ //若比0小,则到达不了后一位,则前一位需要走更远,所以n++,再继续遍历,若前一位可以,则n被置回0,若不行,继续++
n++;
}
if(i ==0 && n>0)
{
return false;
}
}
return true;
}