leetcood学习笔记-45-跳跃游戏二

题目描述:

第一次提交;超时

class Solution:
    def jump(self, nums: List[int]) -> int:
        l = []
        for i in range(len(nums)):
            l.append(i)
        for i, v in enumerate(nums):
            for j in range(1,v+1):
                if i + j < len(l) and l[i + j] > l[i] + 1:
                    l[i + j] = l[i] + 1
        return l[-1]     

方法一:贪心 O(n)

class Solution:
    def jump(self, nums: List[int]) -> int:
        step =0;n=len(nums);last=0;cur=0
        for i in range(n-1):
            cur=max(cur,i+nums[i])
            if i==last:
                last=cur
                step+=1
                if cur>=n-1:
                    break
        return step
class Solution:
    def jump(self, nums: List[int]) -> int:
        l = len(nums)-1
        if l==0:
            return 0
        elif l==1:
            return 1
        steps = 0
        m = max(nums)
        while l!=0:
            temp = l
            for i in range(max(0,l-1-m),l):
                if i+nums[i]>=l and i<temp:
                    temp = i
            l = temp
            steps += 1
        return steps

 

posted @ 2019-04-19 19:54  oldby  阅读(412)  评论(0编辑  收藏  举报