原题链接:
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语言趋于一致。