递归与动态规划---跳跃游戏
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实现的代码。
给定数组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
相关文章推荐
- 算法练习---跳跃游戏二(动态规划)
- 跳跃游戏 动态规划
- 递归与动态规划---龙与地下城游戏问题
- 跳跃游戏二——动态规划
- 跳跃游戏一(动态规划)
- 跳跃游戏二(动态规划)
- 计蒜客跳跃游戏----动态规划问题
- 计蒜客 跳跃游戏二 动态规划
- 跳跃游戏
- 计蒜客————跳跃游戏二
- 【递归 & 动态规划】POJ 1191 棋盘分割
- 计蒜客--第18题:跳跃游戏
- [BZOJbegin][NOIP十连测第七场]约瑟夫游戏(递推|数学相关|递归)
- Java实现-跳跃游戏1
- 跳跃游戏
- 跳跃游戏-----原博主的分析很精彩
- 9.9递归和动态规划(八)——给定数量不限的硬币,币值为25分,10分,5分,1分,计算n分有几种表示法
- 动态规划 洛谷P1070 道路游戏
- 9.9递归和动态规划(四)——返回某集合的所有子集
- HTML5 2D平台游戏开发#2跳跃与二段跳