题目链接
这个题目上来先尝试了一下顺序合并,就是依次把链表合并但是这样的时间复杂度很高为O(KN^2),其中K是链表的平均长度,N为链表总数。其空间复杂度为O(1)。
所以只能换成分治合并算法,这个算法的时间复杂度是O(NKxlogK),空间复杂度是O(logN)。
然后,还有一种方法是用堆来做,由于需要得到一个升序列表,说明我们需要做一个小顶堆。该算法如3所示,时间复杂度为O(KNxlogK),空间复杂度为O(NK)。不过这应该不是最正宗的那种利用优先队列的,讲道理应该用优先队列维护一个最长为N的列表,先将所有链表的头部节点加入之后然后依此pop和push相应的链表的下一个节点。
python:
C++: