Given an array of non-negative integers, you are initially positioned at the first index of the array.
Each element in the array represents your maximum jump length at that position.
Determine if you are able to reach the last index.
For example:
A = [2,3,1,1,4]
, return true
.
A = [3,2,1,0,4]
, return false
.
题目给出一个数组,数组元素值表示最多可以跳跃的步数,例如位置2处的数组元素值为1,则从位置2可以到达位置1和位置3。
题目要求判断是否可以从起始位置(下标0)跳到结束位置(n-1)。
解答:
使用一个变量farthest表示位置0可以到达的最远位置,遍历数组并更新farthest,具体判断如下
当farthest小于位置i时,说明已经不能从起始位置到达位置i了,更不用说位置n-1了,直接返回false
当farthest大于等于位置i时,根据位置i上的最大跳跃步数更新farthest值,并且在每次更新完后判断farthest是否大于等于n-1,这样可以尽可能早的结束程序,不一定非得遍历完成数组后再得出结论。
AC code:
class Solution {
public:
bool canJump(int A[], int n)
{
int farthest=0;
for(int i=0;i<n;i++)
if(i>farthest) //连接断了
return false;
else
{
if(i+A[i]>farthest)
farthest=i+A[i];
if(farthest>=n-1)
return true;
}
}
};