时间复杂度:我们知道合并两个有序链表,等于两个链表长度的和,所以是O(2n),要合并k/2个,之后合并k/4个链表,合并时间复杂度是O(4n),所以最终的时间复杂度还是O(n k log(k)) 。
空间复杂度:我们归并要使用递归,递归的深度为logk,所以我们要使用O(logk)的栈空间。
示例代码
使用堆合并
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
classSolution: defmergeKLists(self, lists: List[ListNode]) -> ListNode: dummy = ListNode(0) cur = dummy # 这里的i为了排序 heap = [(l.val, i, l) for i, l in enumerate(lists) if l] heapq.heapify(heap) while heap: val, ind, l = heapq.heappop(heap) cur.next = l if l.next: l = l.next heapq.heappush(heap, (l.val, ind, l)) cur = cur.next return dummy.next