leetcode023Merge k Sorted Lists合并K个排序链表 最高效解法O(nlogk)O(1)

    xiaoxiao2024-11-15  78

    所有Leetcode题目不定期汇总在 Github, 欢迎大家批评指正,讨论交流。

    简化版题目 合并2个有序链表

    ''' Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. Example: Input: [ 1->4->5, 1->3->4, 2->6 ] Output: 1->1->2->3->4->4->5->6 ''' # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: # Approach one 分治的思想两两合并 O(NlogK) , O(1) # 想想二叉树,K个有序链表合并可以变成k-1次的“两个有序链表合并问题” def mergeKLists(self, lists: List[ListNode]) -> ListNode: # def merge2lists(l1,l2): # if not l1: return l2 # if not l2: return l1 # if l1.val <= l2.val: # l1.next = merge2lists(l1.next , l2) # return l1 # else: # l2.next = merge2lists(l1 , l2.next) # return l2 def merge2lists(l1,l2): res = cur = ListNode(None) while l1 and l2: if l1.val <= l2.val: cur.next , l1 = l1 , l1.next else: cur.next , l2 = l2 , l2.next cur = cur.next cur.next = l1 if l1 else l2 return res.next while len(lists) > 1: lists.append(merge2lists(lists.pop(0),lists.pop(0))) return lists[0] if lists else None # 注意输入为空
    所有Leetcode题目不定期汇总在 Github, 欢迎大家批评指正,讨论交流。
    最新回复(0)