1. 程式人生 > 其它 >【leetcode】23:合併k個生序連結串列

【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