K個公升序鍊錶合併 (每日一題)

2022-06-09 07:06:07 字數 909 閱讀 5609

給你乙個鍊錶陣列,每個鍊錶都已經按公升序排列。

請你將所有鍊錶合併到乙個公升序鍊錶中,返回合併後的鍊錶。

示例 :

輸入:lists = [[1,4,5],[1,3,4],[2,6]]

輸出:[1,1,2,3,4,4,5,6]

解釋:鍊錶陣列如下:

[1->4->5,

1->3->4,

2->6

]將它們合併到乙個有序鍊錶中得到。

1->1->2->3->4->4->5->6

解決思路:首先想到的是在兩個有序鍊錶合併的基礎上進行改進,於是乎,第一版**出爐:

/**

* definition for singly-linked list.

* type listnode struct

*/func mergeklists(lists *listnode) *listnode

if len(lists) == 1

if len(lists) == 2

mid := len(lists)/2

lists1 := lists[:mid]

lists2 := lists[mid:]

return mergetwolists(mergeklists(lists1),mergeklists(lists2))

}func mergetwolists(l1,l2 *listnode) *listnode

if l2==nil

pre := &listnode

cur := pre

if l1.val>l2.valelse

return pre.next

}

想一下,這個演算法的時間複雜度是多少呢?o(nlogn),

改進一波:

使用堆來進行優化

leetcode每日一題 合併k個排序鍊錶

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 這個思路是我最先想到的思路,通過對鍊錶兩兩進行合併,得到排序好的鍊錶。時間複雜度是o n logk o nlogk o nlog k 也比較簡單,...

每日一題 23 合併K個排序鍊錶

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 參考力扣大佬的思路,僅僅將比較器使用lambda表示式將語法簡化。主要思路是使用優先佇列,步驟如下 1.依次將各個有序鍊錶的表頭壓入優先佇列 小頂堆 2...

合併K個公升序鍊錶

給你乙個鍊錶陣列,每個鍊錶都已經按公升序排列。請你將所有鍊錶合併到乙個公升序鍊錶中,返回合併後的鍊錶。示例 1 輸入 lists 1,4,5 1,3,4 2,6 輸出 1,1,2,3,4,4,5,6 解釋 鍊錶陣列如下 1 4 5,1 3 4,2 6 將它們合併到乙個有序鍊錶中得到。1 1 2 3 ...