zoukankan      html  css  js  c++  java
  • 3-2

    23.合并k个排序链表

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

    示例:

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

    A simple and understandable python solution:

    # 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
            """
            nums, dum = [], ListNode(0)
            p = dum
            for l in lists:
                while l:
                    nums.append(l)
                    l = l.next
            for i in sorted(nums, key = lambda l: l.val):
                p.next = i
                p = p.next
            return dum.next
    

    分析:

    • 第一步:先用一个for循环把所有链表中的所有节点都取出来,放到nums中;
    • 第二步:排序(这一步可以放到第三步中完成)。代码中的排序使用了匿名函数lambda,可以加快运行速度;
    • 第三步:将有序的nums中的节点取出来,重新封装成链表。
    • 时间复杂度:假设链表的平均长度为d,总共有k个链表,则整体时间复杂度为(O(kd))
  • 相关阅读:
    2018年春季个人阅读计划
    软件需求我们需要做到什么
    开发日志03
    开发日志02
    开发日志01
    软件需求模式阅读笔记2
    2020/2/11-Python学习计划
    2020/2/10-Python学习计划
    2020/2/9-Python学习计划
    2020/2/8-Python学习计划
  • 原文地址:https://www.cnblogs.com/tbgatgb/p/11107226.html
Copyright © 2011-2022 走看看