题目
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-k-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
找出所有链表中的头结点最小值,加入新链表中复杂度nk(n为链表个数,k为所有总长度)
使用优先队列可一使复杂度变为n ×log(k)使找最小的复杂度从k变log(k)但消耗额外空间
分治: 待补。
代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def mergeKLists(self, lists: List[ListNode]) -> ListNode:
head=ListNode(0)
ans=head
while(1):
mi=2**31-1
for i in range(len(lists)):
if lists[i]!=None and lists[i].val<mi:
mi=lists[i].val
for i in range(len(lists)):
if lists[i]!=None and lists[i].val==mi:
ans.next=lists[i]
lists[i]=lists[i].next
ans=ans.next
if mi==2**31-1:
break
return head.next