@author: zzq
@software: pycharm
@file: mergeklists.py
@time: 2018/10/12 19:55
說明:合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。
示例 :
輸入:[
1->4->5,
1->3->4,
2->6
]輸出: 1->1->2->3->4->4->5->6
思路:兩兩合併再合併,判斷奇偶,每次用乙個新的陣列來存放當前經過合併後的新的鍊錶首節點,時間複雜度:o(nlogn)
# definition for singly-linked list.
# class listnode(object):
# def __init__(self, x):
# self.val = x
# self.next = none
class solution(object):
def mergetwolists(self, l1, l2):
""":type l1: listnode
:type l2: listnode
:rtype: listnode
"""if l1 is none and l2 is none:
return none
if l1 is none:
return l2
if l2 is none:
return l1
l3 = listnode(0)
head = l3
while l1 is not none and l2 is not none:
if l1.val > l2.val:
l3.next = l2
l2 = l2.next
else:
l3.next = l1
l1 = l1.next
l3 = l3.next
if l1 is not none and l2 is none:
l3.next = l1
if l1 is none and l2 is not none:
l3.next = l2
return head.next
def mergeklists(self, lists):
""":type lists: list[listnode]
:rtype: listnode
"""if len(lists) == 0:
return none
cur_list = lists
while len(cur_list) > 1:
cur_temp_list =
if len(cur_list) % 2:
for i in range((len(cur_list) - 1) / 2):
else:
for i in range(len(cur_list) / 2):
cur_list = cur_temp_list
return cur_list[0]
leetcode題庫 合併k個排序鍊錶
合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 definition for singly linked list.struct listnode class solution if p val q ...
LeetCode 23 合併 K個排序序列
合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 解題思路 採用分治的思想,將 k 個鍊錶的合併問題轉換成,合併 2 個有序鍊錶的問題 typedef struct listnode list 定...
leetcode 23 合併K排序鍊錶
合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 解析 看到這一題,馬上就能想到之前的合併兩個鍊錶leetcode 21.合併兩個有序鍊錶 這一題相當於上一題的公升級版,從合併的實現方法上來說可以...