算法分析课每周练习 Merge k Sorted Lists

来源:互联网 发布:国密算法标准 编辑:程序博客网 时间:2024/06/06 18:49

题目

Merge k Sorted Lists

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

分析

Merge Sort 里有合并Sorted List的步骤,这个是一般情况,如果两两合并时间复杂度,O(Node* log (Lists)),但比较占内存

这里用一个PriorityQueue来解决插入顺序,每次插入都要pop和enqueue,时间复杂度是O(1)和O(log(Lists)),总体时间复杂度为O(Node*log(Lists)),

空间复杂度是O(Node + Lists)

from Queue import PriorityQueueclass Solution(object):    def mergeKLists(self, lists):        dummy = ListNode(None)        curr = dummy        q = PriorityQueue()        for node in lists:            if node: q.put((node.val,node))        while q.qsize()>0:            curr.next = q.get()[1]            curr=curr.next            if curr.next: q.put((curr.next.val, curr.next))        return dummy.next