int jump(int nums, int numsSize) {
/

思路:
1.都是从0开始,所以maxlength = 0,每跳跃一次,遍历从index = 0到index = nums[i],即这一次所能跳跃最大距离的所有的元素,判断跳跃这一 次所到达的最远距离,更新maxlength,以此类推,直至maxlength >= numsSize - 1
*/
int maxlength = nums[0];
int amount = 0;

if(numsSize == 1){
    return amount;
}
if (maxlength  >= numsSize - 1){
        return amount + 1;
    }

/*for(int i = 0; i < numsSize; i++){
    for(int j = i + 1; j <= i + nums[i]; j++){
        if(j == numsSize - 1){
            return amount + 1;
        }
        maxlength = maxlength > nums[j] + j ? maxlength : nums[j] + j;
    }
    amount = amount + 2;

    if (maxlength  >= numsSize - 1){
        return amount;
    }

    i = maxlength - 1;

}
return amount;*/

int i = 0;
while(maxlength  < numsSize - 1){
     for(int j = i + 1; j <= i + nums[i]; j++){
        if(j == numsSize - 1){
            return amount + 1;
        }
        maxlength = maxlength > nums[j] + j ? maxlength : nums[j] + j;
    }
    amount = amount + 2;
    i = maxlength;

}
return amount;

}

int jump(int* nums, int numsSize) {
int maxlength = nums[0];
long amount = 0; // 将 amount 的类型改为 long

if(numsSize == 1) {
    return amount;
}

int i = 0;
while (maxlength <= numsSize - 1) {
    for (int j = i + 1; j <= i + nums[i]; j++) {
        if (j == numsSize - 1) {
            return amount + 1;
        }
        maxlength = maxlength > nums[j] + j ? maxlength : nums[j] + j;
        if (maxlength >= numsSize - 1) {
            return amount + 2;
        }
    }
    amount = amount + 2;
    i = maxlength;
}

return amount;

}

从当前元素开始,遍历该元素值范围内能遍历的所有元素,判断选择哪个元素实现下一步走的最远
每遍历一个,计算一次选择该元素能到达的最远距离(下标加元素值)
eg:{2 3 1 1 4 6 2 1}
从2的下一个元素3开始遍历,选择3时,最远到达1 + 3 = 4,选择1时,最远能到达2 + 1 = 3,最远到达1,遍历结束,以4作为下一次遍历的开始
从4的下一个元素6开始遍历,选择6时,最远能到达5 + 6 = 11,选择2时…… !!!不足点 已经达到结束条件,还要继续循环

int max(int a, int b) {
return a > b ? a : b;
}
int jump(int* nums, int numsSize) {
int maxReach = 0; // 当前位置能到达的最远距离
int steps = 0; // 跳跃次数
int end = 0; // 当前跳跃范围的边界 上一次跳跃的的终点 第一次跳跃上一次的终点即为0

for (int i = 0; i < numsSize - 1; i++) {
    maxReach = max(maxReach, i + nums[i]);// 更新当前位置能到达的最远距离
    if (i == end) { // 如果到达当前跳跃范围的边界
        end = maxReach; // 更新下一次跳跃的边界为当前位置能到达的最远距离
        steps++; // 增加跳跃次数
    }
}
return steps;

}
eg:{2 3 1 1 4 6 2 1}