【leetcode】23:合并k个生序链表

这道题一看其实可以使用最大堆的方式来完成。使用最大堆来解决本题的时间复杂度为:o(mn*log(k)),这样虽然很巧妙,但是由于还乘上了logk的缘故时间反而慢了。因此我们可以直接通过直接对这个二维数组lists进行遍历,这样就可以得到一个sorted的数组。因此使用sort这个函数,也就是快速排序。因此整个过程的时间复杂度为O(nm*log(mn)),稍微比最大堆慢了一点。但是总体趋势是一样的。

代码如下所示:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def mergeKLists(self, lists: List[ListNode]) -> ListNode:
        #这题目一看其实可以用最大堆来做,但是由于时间复杂度是一样的,还不如直接对整个二位lists进行遍历
        one_list=[]
        i=0
        while i<len(lists):
            while lists[i]:
                one_list.append(lists[i].val)
                lists[i]=lists[i].next
            i+=1

        one_list=sorted(one_list)
        ret=ListNode(0)
        real_ret=ret
        i=0
        while i<len(one_list):
            ret.next=ListNode(one_list[i])
            ret=ret.next
            i+=1

        return real_ret.next
原文地址:https://www.cnblogs.com/geeksongs/p/14944883.html