Leetcode題庫 23 合併k個排序鍊錶

2022-05-20 23:51:13 字數 1601 閱讀 5607

@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.合併兩個有序鍊錶 這一題相當於上一題的公升級版,從合併的實現方法上來說可以...