題目**
合併 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 思路 設定乙個堆,每次把每個鍊錶的頭結點放入堆中。記錄每個節點的值與在原陣列中的位置,便於鍊錶往下走。彈出堆中最小值,把最小值所在位置的陣列...