【leetcode】23:合併k個生序連結串列
阿新 • • 發佈:2021-06-28
這道題一看其實可以使用最大堆的方式來完成。使用最大堆來解決本題的時間複雜度為: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