LintCode刷题 104. Merge K Sorted Lists

本文介绍了一种解决合并K个排序链表问题的方法。通过将所有链表元素收集到数组中并排序,最终构建出一个新的排序链表。讨论了这种方法的时间复杂度为O(nlogn)和空间复杂度。

原题链接:

http://www.lintcode.com/zh-cn/problem/longest-consecutive-sequence/

题目描述

合并k个排序链表,并且返回合并后的排序链表。尝试分析和描述其复杂度。

样例 给出3个排序链表[2->4->null,null,-1->null],返回 -1->2->4->null

题目解析:

思路

思路一

我们先遍历一次所有的链表中的元素。然后将元素全部放在一个数组里面。接着对这个数组进行排序,最终将排序后的数组里面的所有元素链接起来。 空间复杂度:因为需要一个数组,所以需要额外的空间。这个空间的大小就是链表元素的个数 时间复杂度:假设一个是n个元素,对链表进行遍历(n),对数组进行排序(排序算法可以达到nlogn),最终链接所有元素(n),就是 (n+nlogn+n),也就是O(nlogn)。

代码(Python)

思路一代码
  """
    """
    @param lists: a list of ListNode
    @return: The head of one sorted list.
    """
    def mergeKLists(self, lists):
        # write your code here
        if lists == None or len(lists) == 0:
            return None
        
        #数组,用来存储所有节点    
        nodeLists = []
        
        #将所有节点放在数组里面
        for i in range(len(lists)):
            head = lists[i]
            
            while(head):
                nodeLists.append(head)
                head = head.next
        
        #根据节点的数值进行排序
        nodeLists = sorted(nodeLists,key=lambda x:x.val)
                
        tempHead = ListNode(0)
        currentNode = tempHead
        
        #将所有节点拼成链表
        for i in range(len(nodeLists)):
            currentNode.next = nodeLists[i]
            currentNode = currentNode.next
            
        return tempHead.next
复制代码

谦言忘语

个人目前只懂一丁点python语法,所以不做语法上的优化,而且整体代码风格效果会尽量跟C语言趋于一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值