LintCode : 跳跃游戏
题目
给出一个非负整数数组,你最初定位在数组的第一个位置。
数组中的每个元素代表你在那个位置可以跳跃的最大长度。
判断你是否能到达数组的最后一个位置。
样例
A = [2,3,1,1,4],返回 true.
A = [3,2,1,0,4],返回 false.
思路
我们知道当前节点可以向前跳跃的距离与当前节点与前一节点有关,考虑当前节点的话,我们当前所能跳跃的最大长度就是当前节点的值。考虑前一节点的话,我们当前所能跳跃的最大长度就是前一节点的跳跃长度 - 1;那么综合考虑两个因素,我们得到当前节点的跳跃长度为max(当前节点值,前一节点最大跳跃值 - 1);当遇到最长跳跃长度为0时,则说明无法到达终点。
代码
bool canJump(vector<int> A) {
if(A[0] == 0)
if(A.size() == 1)
return true;
else return false;
int maxJump = A[0];
for(int i = 1; i < A.size() - 1; i++) {
maxJump = max(maxJump - 1, A[i]);
if(maxJump == 0)
return false;
}
return true;
}