【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