Nの組み合わせリスト

  

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.新しいコレクションは、コレクションの新しい要素は、リターンができる唯一の結果があるとして、再帰的に呼ばれます。

おすすめ

転載: www.cnblogs.com/wuyouwei/p/11773027.html