Kは、ソートリストをマージリストを返し組み合わせソート。アルゴリズムの分析と説明を複雑にしてください。
例:
入力:
[
1-> 4 - > 5、
1-> 3-> 4、
2-> 6
]
出力:1-> 1-> 2-> 3-> 4-> 4-> 5-> 6
パブリック 静的ListNodeのmergeKLists(ListNode []リスト){ int型のカウント= lists.length / 2 + lists.length%2 。 もし(== 0をカウント){ 戻り ヌル。 } ListNode [] newLists = 新しいListNode [カウント]。 以下のために(int型、iはlists.lengthを<; I = 0 iが= I + 2 ){ 場合(lists.length <= I + 1 ){ newLists [回数 -1] = リスト[i]は、 破ります; } newLists [I / 2] = mergeTwoLists(リスト[i]は、リスト[I + 1 ])。 } もし(newLists.length> 1 ){ 戻りmergeKLists(newLists)。 } 返す newLists.length == 0を?ヌル:newLists [0 ]。 }
パブリック 静的ListNodeのmergeTwoLists(ListNode L1、L2 ListNode){ ListNodeダム = 新しい ListNode(0 )。 ListNodeヘッド = ダム。 一方(L1!= NULL && L2!= NULL ){ 場合(l1.val < l2.val){ dumb.next = L1; L1 = l1.next。 } 他{ dumb.next = L2; L2 = l2.next。 } ダム = dumb.next。 } dumb.next =(L1 == nullの?L2:L1)。 返すhead.nextを。 }
アイデア:
1.二つのリストのコレクションは新しいコレクションに結合されます。
2.新しいセットのサイズは2で割っプラス原稿がセット・サイズを法の元のセットの大きさは2で割り切れるされています。
3.新しいコレクションは、コレクションの新しい要素は、リターンができる唯一の結果があるとして、再帰的に呼ばれます。