23. Merge k Sorted Lists
problem description
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Example:
algorithm thought
之前又题目做过合并两个有序链表的,这里是k个。可以借助归并排序的思路,每个两两合并,合并到最后就可以了。也可以用堆的来做。用最小堆,每次从堆中取出最小的链表,然后将这个链表的下一个值重新加入到堆中。在c++中,可以用stl自带的heap类算法做这题,也可以用直接用优先队列来做这题。
我这里是用优先队列来做的
code
algorithm analysis
这个算法不好分析,现在假设有k个链表,每个链表大小都是n,并且都是一样的链表。首先建堆需要O(k)时间复杂度(我这题不是交换建堆,是一个个插入的),每次拿出是O(lgk),再插入是O(lgk),进行n*k次最后时间是O(n)+O(lgk)*n*k,所以时间复杂度是O(nklgk).当然这只是大致分析。
Last updated