Description:
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
.
算法分析:
Jump Game是一道有意思的题目。题意很简单,给你一个数组,数组的每个元素表示你能前进的最大步数,最开始时你在第一个元素所在的位置,之后你可以前进,问能不能到达最后一个元素位置。
我们可以考虑用动态规划的方法解决
代码如下:
class Solution:
# @param A, a list of integers
# @return an integer
# def jump(self, A):
# maxint = 1<<31 - 1
# dp = [ maxint for i in range(len(A)) ]
# dp[0] = 0
# for i in range(1, len(A)):
# for j in range(i):
# if A[j] >= (i - j):
# dp[i] = min(dp[i], dp[j] + 1)
# return dp[len(A) - 1]
# dp is time limited exceeded!
# We use "last" to keep track of the maximum distance that has been reached
# by using the minimum steps "ret", whereas "curr" is the maximum distance
# that can be reached by using "ret+1" steps. Thus,curr = max(i+A[i]) where 0 <= i <= last.
def jump(self, A):
ret = 0
last = 0
curr = 0
for i in range(len(A)):
if i > last:
last = curr
ret += 1
curr = max(curr, i+A[i])
return ret