温习数据结构和算法

2020-02-14  本文已影响0人  sparkshen

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

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

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分钟,默写一遍。这还记不住,有点说不过去了吧。因为后边还有更多动画

上一篇下一篇

猜你喜欢

热点阅读