题目描述:给出一个非负整数数组,你最初定位在数组的第一个位置。数组中的每个元素代表你在那个位置可以跳跃的最大长度。判断你是否能到达数组的最后一个位置。
样例:
A = [2,3,1,1,4],返回 true.
A = [3,2,1,0,4],返回 false.
加入第0位的值是i,那也就是说最远能从第0位跳到第 i 位,其实,这也就意味着0到 i 的所有位置都能到达。
因此,算法可以这样设计:
依次遍历数组,求每一步所能达到的最远位置的最大值,
1. 这个最大值如果大于或等于n - 1,则表示一定能达到最后一个位置;
2. 而如果在遍历过程中,发现某个位置(数组下标)大于最远位置了,那也就是说不可能到达这个位置,当然就不可能到达最后了;
比如样例中第二个例子:
1. 扫描到3,far = 0 + 3
2. 扫描到2,far = max(3, 1 + 2) = 3
3. 扫描到1,far = max(3, 2 + 1) = 3
4. 扫描到0,far = max(3, 3 + 0) = 3
5. 扫描到4,此时,数组下标为4,4 > 3,失败
给出代码:
class Solution:
# @param A, a list of integers
# @return a boolean
def canJump(self, A):
cur, far = 0, 0
n = len(A)
while cur != n:
if far >= n - 1:
return True
elif cur > far:
return False
far = max(far, cur + A[cur])
cur += 1
# write your code here