您的位置:首页 > 编程语言 > Python开发

递归与动态规划---跳跃游戏

2017-08-15 20:04 246 查看
【题目】

  给定数组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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动态规划 递归 python