Divide and Conquer
2016-11-15 15:04
316 查看
23. Merge k Sorted Lists
Merge k sorted
linked lists and return it as one sorted list. Analyze and describe its complexity.
合并k个有序链表。如果利用mergeTwoLists函数按照顺序逐一合并的话,时间复杂度为O(2n+3n+...+kn)=O(nk^2),会超时。可以采用归并的思想,每次两两合并链表,时间复杂度为O(2n*(k/2)+4n*(k/4)+...+kn*1)=O(nklogk)。
Merge k sorted
linked lists and return it as one sorted list. Analyze and describe its complexity.
合并k个有序链表。如果利用mergeTwoLists函数按照顺序逐一合并的话,时间复杂度为O(2n+3n+...+kn)=O(nk^2),会超时。可以采用归并的思想,每次两两合并链表,时间复杂度为O(2n*(k/2)+4n*(k/4)+...+kn*1)=O(nklogk)。
class Solution { public: ListNode* mergeTwoLists(ListNode *l1,ListNode *l2){ if(l1==NULL) return l2; if(l2==NULL) return l1; if(l1->val<=l2->val){ l1->next=mergeTwoLists(l1->next,l2); return l1; }else{ l2->next=mergeTwoLists(l1,l2->next); return l2; } } ListNode* mergeKLists(vector<ListNode*>& lists) { if(lists.empty()) return NULL; int len=lists.size(); while(len>1){ for(int i=0;i<len/2;i++){ lists[i]=mergeTwoLists(lists[i],lists[len-i-1]); } len=(len+1)/2; } return lists.front(); } };
相关文章推荐
- 分治 Divide and Conquer
- leetCode刷题归纳-Divide and Conquer(241. Different Ways to Add Parentheses)
- LeetCode之Divide and Conquer题目汇总
- [Algorithm]分治法 Divide and Conquer 与 主定理 Master Theorem
- 154. Find Minimum in Rotated Sorted Array II (Array; Divide-and-Conquer)
- algorithm:divide and conquer
- 34. Search for a Range (Array; Divide-and-Conquer)
- Divide and Conquer -- Leetcode problem241:Different Ways to Add Parentheses
- 1.Two Sum (Array; Divide-and-Conquer)
- 分治 Divide and Conquer
- [算法Tutorial]Divide and Conquer,分治策略
- 分治策略Divide and Conquer
- 关于divide and conquer的两道Leetcode
- Divide and conquer:Dropping tests(POJ 2976)
- Introduction of Algorithm - Divide and Conquer(分治法)
- leetcode Decode Ways Divide and Conquer
- divide and conquer 二分查找
- selection problem-divide and conquer
- 漫谈算法(四)分治算法 Divide and Conquer Algorithm
- 算法学习笔记--5.merge sort & divide-and-conquer