leetcode 45 跳跃游戏2

贪心的方法,从后往前找到哪些值可以跳到终点,取离终点最远的点,然后在接着找哪些点可以到这个点,那个点离这个点最远。注意从一个点到另一个点是算一步。
通过一步一步的局部最优,达到全局最优。

        end=len(nums)
        count=0

        while end!=1:  

            for i in range(end):

                if nums[i]+i>=end-1:
                    print(end-1-i)
                    count+=1
                    end=i+1
                    break


        return count 

通过递归方法,模拟选择的过程,然后通过递归回来将每一步加在count上面,同时比较得出最小值。
这里因为超时,需要记忆化递归

class Solution:
    def jump(self, nums: List[int]) -> int:


        memo={}

        def dfs(i):
            if i==len(nums)-1:
                return 0
            if i>len(nums)-1:
                return -1
            mini=float('inf')
            for j in range(1,nums[i]+1):

                if i+j in memo:
                    res=memo[i+j]

                else:

                    res=dfs(i+j)
                    memo[i+j]=res

                if res>=0 and res<mini:
                    mini=res+1

            return mini 

        return dfs(0)

使用lru_cache 参数填None
@functools.lru_cache(maxsize=None, typed=False)
参数是要存多少数据

使用 functools 模块的 lur_cache 装饰器,可以缓存最多 maxsize 个此函数的调用结果,从而提高程序执行的效率,特别适合于耗时的函数。参数 maxsize 为最多缓存的次数,如果为 None,则无限制,设置为 2 的幂 时,性能最佳;如果 typed=True(注意,在 functools32 中没有此参数),则不同参数类型的调用将分别缓存,例如 f(3) 和 f(3.0)。

class Solution:
    def jump(self, nums: List[int]) -> int:


        memo={}
        @functools.lru_cache(None)
        def dfs(i):
            if i==len(nums)-1:
                return 0
            if i>len(nums)-1:
                return -1
            mini=float('inf')
            for j in range(1,nums[i]+1):           

                res=dfs(i+j)


                if res>=0 and res<mini:
                    mini=res+1

            return mini 

        return dfs(0)
        count=0

正面寻找每次可以找到可以到达的最远位置的位置,通过一次for循环,当当前i遍历到最远边界的时候,次数增加一。
由于在下标为0的位置增加了一次1,所以只遍历到len(nums)-1

        count=0
        maxpos=0
        end=0

        for i in range(len(nums)-1):
            maxpos=max(maxpos,nums[i]+i)
            if i==end:
                count+=1
                end=maxpos
        return count
全部评论

相关推荐

07-18 18:45
已编辑
中山职业技术学院 Java
投递TP-LINK等公司7个岗位
点赞 评论 收藏
分享
06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务