[일기] Task11- 제목 leetcode 브러시 K 병합 정렬 목록

제목 설명

K 병합 정렬 목록, 목록이 결합 된 소트 돌아갑니다. 기술과 알고리즘의 복잡성을 분석하십시오

입력 :
[
1-> 4 -> 5,
1-> 3-> 4,
2-> 6
]
출력 : 1-> 1-> 2-> 3-> 4 -> 4-> 5-> 6

문제 해결 아이디어

  • 폭력 : 합병 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:
        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 · 조회수 1,247

추천

출처blog.csdn.net/soulmate______/article/details/104815672