合併K個排序鍊錶

2021-10-11 15:57:14 字數 1553 閱讀 5486

題目**

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

示例:

輸入:

[ 1->4->5,

1->3->4,

2->6

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

方法一:先排序再合併

public listnode mergeklists(listnode lists) 

}arrays.sort(temp,0,index);

listnode head=new listnode(0);

listnode p=head;

for (int i = 0; i < index; i++)

return head.next;

}

時間複雜度o(n) n為結點總個數

空間複雜度o(n)

方法二:逐一比較

將所有鍊錶的某個位置的元素進行比較,選出最小的乙個,將這個結點作為結果鏈起來

public listnode mergeklists(listnode lists) 

return head;

}public listnode mergetwolist(listnode node1,listnode node2)

if(node2==null)

listnode head=new listnode(0);

listnode curr=head;

listnode p=node1;

listnode q=node2;

while (p!=null&q!=null)

while (len>1) else

index++;

}len=index;

}return lists[0];

}public listnode mergetwolist(listnode node1,listnode node2){

listnode head=new listnode(0);

listnode curr=head;

listnode p=node1;

listnode q=node2;

while (p!=null&q!=null){

if(p.val合併過程:

1->4->5

1->3->4

2->6

31->5

第一次while迴圈 len=5

list[0]=1->1->3->4->4->5

list[1]=2->3->6

list[2]=1->5

第二次while迴圈 len=3

list[0]=1->1->2->3->3->4->4->5->6

list[1]=1->5

第三次while迴圈 len=2

list[0]=1->1->1->2->3->3->4->4->5->5->6

合併k個排序鍊錶

合併k個排序鍊錶,並且返回合併後的排序鍊錶。嘗試分析和描述其複雜度。樣例 給出3個排序鍊錶 2 4 null,null,1 null 返回 1 2 4 null 兩兩合併 合併ab得到c 合併cd得到e definition for listnode.public class listnode pu...

合併K個排序鍊錶

從21.合併兩個有序鍊錶的基礎上,我們已經能夠解決兩個有序鍊錶的問題,現在是k個有序鍊錶,我們可以將第一二個有序鍊錶進行合併,然後將新的有序鍊錶再繼續跟第三個有序鍊錶合併,直到將所有的有序鍊錶合併完成。這樣做思路上是可行的,但是演算法的時間複雜度將會很大,具體就不計算了。有興趣的自己計算下。根據思路...

合併K個排序鍊錶

題目 合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 思路 設定乙個堆,每次把每個鍊錶的頭結點放入堆中。記錄每個節點的值與在原陣列中的位置,便於鍊錶往下走。彈出堆中最小值,把最小值所在位置的陣列...