[日記] Task11-タイトルleetcodeブラシKマージソートリスト

タイトル説明

Kマージソートリスト、リストを返し組み合わせソート。アルゴリズムの複雑さを説明し、分析してください。

入力:
[
1-> 4 - > 5、
1-> 3-> 4、
2-> 6
]
出力:1-> 1-> 2-> 3-> 4-> 4-> 5-> 6

問題解決のためのアイデア

  • 暴力:合併kはソートリストは、再帰的な問題に変換されるようにターンマージ2は、順序付きリスト
# 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:
        def mergeTwoLists(l1,l2):
            pre = ListNode(None)
            head = pre
            while l1 and l2:
                if l1.val <= l2.val:
                    pre.next = l1
                    l1 = l1.next
                    pre = pre.next
                else:
                    pre.next = l2
                    l2 = l2.next
                    pre = pre.next
            pre.next = l1 if l1 else l2
            return head.next
        if not lists:
            return
        r = lists[0]
        for i in range(1,len(lists)):
            r = mergeTwoLists(r,lists[i])
        return r

ここに画像を挿入説明

  • 統治法:改善に暴力法に基づいて行われ、最終的には時間の複雑さを低減し、一緒に二十から二合併をマージしています
# 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:
        def mergeTwoLists(l1,l2):
            pre = ListNode(None)
            head = pre
            while l1 and l2:
                if l1.val <= l2.val:
                    pre.next = l1
                    l1 = l1.next
                    pre = pre.next
                else:
                    pre.next = l2
                    l2 = l2.next
                    pre = pre.next
            pre.next = l1 if l1 else l2
            return head.next
        if not lists:
            return
        s = 1 #代表当前合并的两个链表的索引差
        n = len(lists)
        while s < n:
            for i in range(0,n,2 * s):
                if i + s <= n - 1:
                    lists[i] = mergeTwoLists(lists[i],lists[i + s])
            s *= 2
        return lists[0]

ここに画像を挿入説明

概要

  • 質問は必ずブラシソリューションは唯一、暴力を考え出すことができないかもしれません感じるために、実際のアルゴリズムは、問題解決に適用される、給油継続する希望は、このアルゴリズムは、実際に問題解決に適用されます
公開された45元の記事 ウォンの賞賛2 ビュー1247

おすすめ

転載: blog.csdn.net/soulmate______/article/details/104815672