链接:
https://leetcode-cn.com/problems/jump-game/
描述:
示例和提示:
代码:
bool canJump(int* nums, int numsSize){
if(numsSize == 1) return true;
int a = nums[0];
for(int i = 0;i<=a;i++)
{
a = fmax(a,i+nums[i]);
if(a>= numsSize-1)
return true;
}
return false;
}
代码分析:
以题目中的示例一
[2, 3, 1, 1, 4]
为例:
我们一开始在位置 0,可以跳跃的最大长度为 2,因此最远可以到达的位置被更新为 2;
我们遍历到位置 1,由于 1≤2,因此位置 1 可达。我们用 1加上它可以跳跃的最大长度3,将最远可以到达的位置更新为
4。由于4大于等于最后一个位置4,因此我们直接返回 True。
我们再来看看题目中的示例二
[3, 2, 1, 0, 4]
我们一开始在位置0,可以跳跃的最大长度为3,因此最远可以到达的位置被更新为3;
我们遍历到位置1,由于1≤3,因此位置1可达,加上它可以跳跃的最大长度2得到3,没有超过最远可以到达的位置;
位置 2、位置 3 同理,最远可以到达的位置不会被更新;
我们遍历到位置4,因为 已经到不了这个节点所以,直接返回false