合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。
示例:
輸入:方法1:暴力法[1->4->5,
1->3->4,
2->6
]輸出: 1->1->2->3->4->4->5->6
將所有鍊錶元素放入乙個陣列中,再對陣列排序,最後返回乙個排好序的鍊錶,但是似乎時間和記憶體會超,無法通過
複雜度取決於排序占用的複雜度
/**
* 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個鍊錶中取出乙個最小的...