利用python 完成leetcode23 合并两个有序链表

合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

示例:

输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
分析
与21题类似,由两个变成k个,

可以按照21题思路完成同时遍历k个链表,每次将最小的添加的新链表中,设每个链表有k个元素,此算法时间复杂度为 k * k * n(每选一个元素都需对比k个,共有k * n个元素)

利用二分法,将该问题分为2个子问题 一直递归下去,时间复杂度 k *n * log k
(k/(2^1) * 4 * (2^0) * n +k/(2^2) *4 (2^1) * n+…+k/(2^log k ) * 4 * (2^logk)n)

每次合并两个链表,时间复杂度同上

统计所有数,排序之后生成一个新的链表 时间复杂度 k
n
log(k
n)
第21题见此https://blog.csdn.net/qq_37369124/article/details/87516339
此处用第三种方法

 def mergeKLists(self, lists):
        if(lists==[]):return []
        while(len(lists)!=1):
            l=[]
            a=0
            while(a+1

你可能感兴趣的:(leetcode,leetcode困难)