您的位置:首页 > 其它

Jump Game II - LeetCode

2015-04-05 20:32 281 查看

Jump Game II - LeetCode

题目:



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.

Your goal is to reach the last index in the minimum number of jumps.

For example:

Given array A =
[2,3,1,1,4]


The minimum number of jumps to reach the last index is
2
. (Jump
1
step
from index 0 to 1, then
3
steps to the last index.)

分析:

这道题目想了半天总是有漏洞,自己还是想套动态规划,,最后从他人博文上找到一种方法。

比如就是我们题目中的[2,3,1,1,4]。初始状态是这样的:cur表示最远能覆盖到的地方,用红色表示。last表示已经覆盖的地方,用箭头表示。它们都指在第一个元素上。



接下来,第一元素告诉cur,最远咱可以走2步。于是:



下一循环中,i指向1(图中的元素3),发现,哦,i小于last能到的范围,于是更新last(相当于说,进入了新的势力范围),步数ret加1.同时要更新cur。因为最远距离发现了。



接下来,i继续前进,发现i在当前的势力范围内,无需更新last和步数ret。更新cur。



i继续前进,接下来发现超过当前势力范围,更新last和步数。cur已然最大了。



最后,i到最后一个元素。依然在势力范围内,遍历完成,返回ret。





代码:

class Solution:
    # @param A, a list of integers
    # @return an integer
    def jump(self, A):
        length = len(A)
        cur,last,ret = A[0],0,0
        for i in xrange(length):
            if i > last:
                ret += 1
                last = cur
            cur = max(cur,i+ A[i])
        return ret
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: