选C的写法:
bool canJump(int* nums, int numsSize) {
// 创建一个辅助数组 arr,用于存储每个位置上能够跳到的最远位置
int arr[numsSize];
int i;
// 遍历输入数组 nums,并计算每个位置上能够跳到的最远位置,存储在 arr 中
for(i = 0; i < numsSize; i++) {
arr[i] = nums[i] + i;
}
// 初始化当前位置为 0,最远跳跃距离为 arr[0]
int index = 0;
int max_jump = arr[0];
// 使用循环判断是否能够跳到最后一个位置
while(index < numsSize && index <= max_jump) {
// 如果当前位置的最远跳跃距离小于当前位置 arr[index],更新最远跳跃距离
if(max_jump < arr[index]) {
max_jump = arr[index];
}
index++; // 移动到下一个位置
// 如果最远跳跃距离已经达到或超过数组的末尾,则返回 true
if(max_jump >= numsSize) {
return true;
}
}
// 如果循环结束,但仍然无法达到数组末尾,则返回 false
if(index == numsSize) {
return true;
}
return false;
}