美文网首页
温习数据结构和算法

温习数据结构和算法

作者: sparkshen | 来源:发表于2020-02-14 18:27 被阅读0次

    工作以来,高强度使用离散数据结构,以及操作这些结构算法的机会越发少。晚自习的时候,发现一个有趣的问题-滑动窗口最大值。正好这个问题,和最近在用的时序数据里面的一些数据清理场景很匹配,我突然又重新意识到离散数据节后和算法的一些价值。

    花了点时间,看了看链路、堆、字典等。这些结构上,派生出不少经典有趣的问题。

    1. 链路反转 - 4行代码解决:

    def reverseList(self, head): #方法体定义,不计算在内

        prev, cur = None, head

        while cur:

            prev,cur,cur.next = cur, cur.next, prev

        return prev

    要记住这段代码,其实需要脑子里面想象,两个夹子和一根链条。每次循环要做的事情,就是先把链条反转,然后将两个夹子都往下移一个位子 - 为下一段联调反转做准备。

    2. 链路节点两两互换 - 7行代码解决

    def swapPairs(self, head):

        prev, prev.next = self, head

        while prev.next and prev.next.next:

            a = prev.next

            b = a.next

            prev.next, b.next, a.next = b, a, b.next

            prev = a

        return self.next

    因为是两两对调方向,所以需要三个夹子,处理两段链条。

    需要的操作是:加个头,然后用a,b夹住第一段链条。把这里面的两段链条的指向,做适当的调换。然后三个夹子,都往下移一位。


    目标是:把这两段动画,在脑子里能存久一点。我争取每天抽2分钟,默写一遍。这还记不住,有点说不过去了吧。因为后边还有更多动画

    相关文章

      网友评论

          本文标题:温习数据结构和算法

          本文链接:https://www.haomeiwen.com/subject/yvejfhtx.html