(python刷題)leetcode 第23題:合併K個排序鏈表

題目描述
在這裏插入圖片描述

解題思路
使用分治法進行解題。將所有鏈表進行兩兩分組,然後依次進行兩兩合併即可。

複雜度分析:
時間複雜度爲Nlogk,其中N爲所有鏈表的節點總數,k的鏈表數
空間複雜度爲o(1),每次合併兩個鏈表時只需要創建兩個指針即可。

python代碼

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def mergeKLists(self, lists):
        """
        :type lists: List[ListNode]
        :rtype: ListNode
        """ 
        amount = len(lists)
        if amount == 0:
            return lists
        interval = 1
        while interval < amount:
            for i in range(0, amount - interval, interval * 2):
                lists[i] = self.merge2Lists(lists[i], lists[i + interval])
            interval *= 2
        return lists[0]

    def merge2Lists(self, l1, l2):
        newhead = p = ListNode(0)
        while l1 and l2:
            if l1.val <= l2.val:
                p.next = l1
                l1 = l1.next
            else:
                p.next = l2 
                l2 = l2.next
            p = p.next
        if l1:
            p.next = l1
        else:
            p.next = l2
        
        return newhead.next
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章