码迷,mamicode.com
首页 > 编程语言 > 详细

合并K个排序链表

时间:2018-05-20 10:53:36      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:esc   nbsp   else   示例   family   排序   tno   self   class   

中英题面

  合并 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

  Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

  示例:

  输入:
  [
    1->4->5,
    1->3->4,
    2->6
  ]
  输出: 1->1->2->3->4->4->5->6

  Example:

  Input:
  [
    1->4->5,
    1->3->4,
    2->6
  ]
  Output: 1->1->2->3->4->4->5->6  



算法

  分治并结合归并排序思想。

  时间复杂度:

     O(NlogK)

  空间复杂度:

     O(logK)

 
代码
 1 # Definition for singly-linked list.
 2 # class ListNode:
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.next = None
 6 
 7 class Solution:
 8     def mergeKLists(self, lists):
 9         """
10         :type lists: List[ListNode]
11         :rtype: ListNode
12         """
13         if (not lists):
14             return None
15         if (len(lists) == 1):
16             return lists[0]
17         mid = len(lists) // 2
18         hen = self.mergeKLists(lists[: mid])
19         tai = self.mergeKLists(lists[mid :])
20         if (not hen):
21             return tai
22         if (not tai):
23             return hen
24         if (hen.val > tai.val):
25             hen, tai = tai, hen
26         i = hen
27         while (tai):
28             if (i.next):
29                 if (i.next.val > tai.val):
30                     tai.next, i.next, tai = i.next, tai, tai.next
31                 i = i.next
32             else:
33                 i.next = tai
34                 break
35         return hen

合并K个排序链表

标签:esc   nbsp   else   示例   family   排序   tno   self   class   

原文地址:https://www.cnblogs.com/Efve/p/9062356.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!