首先想到的是利用递归算法,算法如下:
提示超时
class Solution {
public:
bool canJump(int A[], int n) {
if(A==NULL||n==0||n==1)
return true;
return canJumpHelper(A, n-1, 0);
}
bool canJumpHelper(int A[], int n, int end)
{
if(end>n)
return false;
if(end==n)
return true;
if(A[end]==0)
return false;
for(int i = 1; i <= A[end]; ++i)
{
canJumpHelper(A, n, end+i);
}
return false;
}
};
优化后的代码,记录最远到达的index,若最后超过n-1,则正确
class Solution {
public:
bool canJump(int A[], int n) {
if(A==NULL||n==0||n==1)
return true;
int canArrive = 0;
for(int i = 0; i <= canArrive&& canArrive<n; ++i)
if(canArrive < A[i] + i)
canArrive = A[i] + i;
return canArrive>=n-1;
}
};