【题目】
给定数组arr,arr[i] == k代表可以从位置i向右跳1~k个距离。比如,arr[2] == 3,代表从位置2可以跳到位置3、位置4或者位置5。如果从位置0出发,返回最少跳几次能跳到arr最后的位置上。
【举例】
arr = [3, 2, 3, 1, 1, 4]
arr[0] = 3,选择跳到位置2;arr[2] == 3,可以跳到最后的位置,所以返回2。
【基本思路】
1.使用3个变量,jump,cur,next。jump表示目前跳了多少次,cur表示跳了jump下后能到达的最远距离,next表示如果再跳一次能到达的最远位置。初始时三个变量都为0。
2.从左到右依次遍历数组arr,假设遍历到位置i,分析如下:
如果i <= cur,说明跳jump次可以到达位置i,此时不需要进行任何操作。
如果i > cur,说明此时跳jump次不能到达位置i,需要再跳一次才行。此时令jump + 1,cur = next。表示多跳了一次,cur更新成跳jump + 1次能到达的最远距离。
- 更新next,next = max(next, i + arr[i]),表示下一次多跳一次能到达的最远距离。
下面是使用python3.5实现的代码。
#跳跃游戏
def jump(arr):
if arr == None or len(arr) == 0:
return 0
jump = 0
cur = 0
next = 0
for i in range(len(arr)):
if cur < i:
jump += 1
cur = next
next = max(i+arr[i], next)
return jump