leetcode 合併K個排序鍊錶

2021-10-03 19:53:56 字數 1323 閱讀 1305

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。

示例:

輸入:

[1->4->5,

1->3->4,

2->6

]輸出: 1->1->2->3->4->4->5->6

方法1:暴力法

將所有鍊錶元素放入乙個陣列中,再對陣列排序,最後返回乙個排好序的鍊錶,但是似乎時間和記憶體會超,無法通過

複雜度取決於排序占用的複雜度

/**

* definition for singly-linked list.

* public class listnode

* }*/public

class

solution

} _list.

sort()

;for

(int i=

0;i<_list.count>

)return temp.next;

}}

方法2:類似與合併兩個有序鍊錶的方法,每一次比較所有鍊錶的結點大小,將最小值插入返回的鍊錶,有一些複雜,沒能寫出來

時間複雜度:o(nk)空間複雜度:o(1)或o(n)

方法3:兩兩合併

根據合併兩個有序鍊錶的方法,將所有鍊錶兩兩合併。

時間複雜度:o(nk) 空間複雜度:o(n)

/**

* definition for singly-linked list.

* public class listnode

* }*/public

class

solution

else

temp=temp.next;}if

(l1==

null

) temp.next=l2;

else

if(l2==

null

) temp.next=l1;

return head.next;

}public

listnode

mergeklists

(listnode[

] lists)

return temp.next;

}}

方法3改進:分治法遞迴

將所有鍊錶二分,分成較少個合併兩個有序鍊錶問題,

時間複雜度可以降到o(n*logk)

leetcode合併K個排序鍊錶

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 直接上 class solution object defmergeklists self,lists type lists list listn...

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題目 合併K個排序鍊錶

合併k個排序鍊錶是我在刷leetcode的時候遇到的題目,描述大致如下 合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 一開始的思路是類似於合併兩個有序鍊錶的思路,就是每次在這k個鍊錶中取出乙個最小的...