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
.
题目意思是说给定一个数组,A[i]表示从第i个点可以跳到的最远距离,比如说i = 0,A[i] = 3表示 从i点最远可以到i = 3这个点。要求给定一个数组,判断是否能从第一个点跳到最后一个点。算法思路是这样的:用一个变量记录当前能跳到的最远距离(distance),从第一个点开始循环判断并且更新最远距离, 这个距离等于当前获得的最远距离与现在所处位置所能到达的最远距离中较大的那个。 有两种情况下可以断定无法到达:1,循环到了倒数第二个元素发现最远距离还是小于最后一个元素的位置。2,遇到了一个元素值为0并且最远距离正好只能到这个元素。.
class Solution {
public:
bool canJump(int A[], int n) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if (n == 0) return false;
if (n == 1) return true;
int longestPos = 0;
for (int i = 0; i < n - 1; ++i)
{
if (A[i] == 0 && longestPos == i) break;
longestPos = longestPos > A[i] + i ? longestPos : A[i] + i;
if (longestPos >= n - 1)
return true;
}
return false;
}
};