[LeetCode]Merge k Sorted Lists
2016-09-30 19:39
281 查看
Question:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
本题难度为hard。
刚开始我的思路是取出两条,用merge2Lists的方法合并为一条,再将这条和下一条用merge2Lists来合并为一条,以此类推。这种方法的结果就是超时。下面对其时间复杂度进行分析:
第二种方法就是分治算法。时间复杂度为O(nklogk),AC过。
时间复杂度分析参考:leetcode——Merge k Sorted Lists
还有一种方法是利用最小堆。
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
本题难度为hard。
刚开始我的思路是取出两条,用merge2Lists的方法合并为一条,再将这条和下一条用merge2Lists来合并为一条,以此类推。这种方法的结果就是超时。下面对其时间复杂度进行分析:
假设有K个list,每个list的平均长度为n 由于每次合并后,都会在原有长度基础上增加n。设第i次合并前,两个list长度分别是i*n,n。那么本次的复杂度就是i*n+n。(按最坏情况:一个list包含另一个list,且二者的最大值紧邻) 那么总时间复杂度=O(2n+3n+…+kn), 为O(nk²)
public class Solution { public ListNode mergeKLists(ListNode[] lists) { //require int size=lists.length; if(size==0||lists==null) return null; //invariant ListNode l1=lists[0],l2; for(int i=1;i<size;i++){ l2=lists[i]; l1=merge2Lists(l1,l2); } //ensure return l1; } public ListNode merge2Lists(ListNode l1,ListNode l2){ while(true){ if(l1==null)return l2; if(l2==null)return l1; if(l1.val<l2.val){ l1.next=merge2Lists(l1.next,l2); return l1; }else{ l2.next=merge2Lists(l1,l2.next); return l2; } } } }
第二种方法就是分治算法。时间复杂度为O(nklogk),AC过。
时间复杂度分析参考:leetcode——Merge k Sorted Lists
public class Solution { public ListNode mergeKLists(ListNode[] lists) { //require int size=lists.length; if(size==0||lists==null) return null; //invariant return divide(lists,0,size-1); } public ListNode divide(ListNode[] lists,int l,int r){ int size=r-l+1; if(size==1) return lists[l]; if(size==2) return merge2Lists(lists[l],lists[r]); //divide,后序遍历 return merge2Lists(divide(lists,l,l+size/2),divide(lists,l+size/2+1,r)); } public ListNode merge2Lists(ListNode l1,ListNode l2){ while(true){ if(l1==null)return l2; if(l2==null)return l1; if(l1.val<l2.val){ l1.next=merge2Lists(l1.next,l2); return l1; }else{ l2.next=merge2Lists(l1,l2.next); return l2; } } } }
还有一种方法是利用最小堆。
相关文章推荐
- leetcode-21. Merge Two Sorted Lists
- 【Leetcode】Merge K Sorted Lists (Sorting)
- [leetcode] Merge Two Sorted Lists
- LeetCode 23. Merge k Sorted Lists [hard]
- leetcode23 -- Merge k Sorted Lists
- Leetcode 21. Merge Two Sorted Lists
- Leetcode -- Merge k Sorted Lists
- LeetCode: Merge Two Sorted Lists, Remove Duplicates/Element, strStr()
- leetcode Merge Two Sorted Lists
- leetcode-Merge Two Sorted Lists
- [#23 leetcode]Merge k Sorted Lists
- leetcode-21-Merge Two Sorted Lists
- LeetCode(Merge Two Sorted Lists ) 合并两个有序的链表
- LeetCode 之 Merge Two / k Sorted Lists — C/C++ 实现
- Leetcode Merge Two Sorted Lists 解题报告
- leetcode Merge k Sorted Lists
- LeetCode - 21. Merge Two Sorted Lists
- leetcode 【 Merge k Sorted Lists 】python 实现
- leetcode-Merge Two Sorted Lists
- leetcode-23-Merge k Sorted Lists