LeetCode 23. Merge k Sorted Lists 【hard】
来源:互联网 发布:volvos90怎么样知乎 编辑:程序博客网 时间:2024/05/22 00:18
原题目:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
题解:
1分治
ListNode* merge2Lists(ListNode* l1, ListNode* l2){ if(l1!=nullptr && l2!=nullptr){ if(l1->val<l2->val){ l1->next = merge2Lists(l1->next,l2); return l1; } else{ l2->next = merge2Lists(l1,l2->next); return l2; } } if(l1==nullptr){ return l2; } else{ return l1; }}ListNode* mergeKLists(vector<ListNode*>& lists){ if(lists.empty()){ return nullptr; } ListNode* ls; while(lists.size()>1){ ls = merge2Lists(lists[0],lists[1]); lists.erase(lists.begin()); lists.erase(lists.begin()); lists.push_back(ls); } return lists[0];}
130 / 130 test cases passed.
Runtime: 69 ms
2堆排序
static bool heapcomp(ListNode* a, ListNode* b){ return a->val > b->val;}ListNode* mergeKLists(vector<ListNode*>& lists){ ListNode* result = new ListNode(0); ListNode* current = result; vector<ListNode*> value_lists; for(int i =0; i<lists.size(); i++){ if(lists[i]) value_lists.push_back(lists[i]); } make_heap(value_lists.begin(),value_lists.end(),heapcomp); while(value_lists.size()){ current->next = value_lists.front(); pop_heap(value_lists.begin(),value_lists.end(),heapcomp); value_lists.pop_back(); current = current->next; if(current->next!=NULL){ value_lists.push_back(current->next); push_heap(value_lists.begin(),value_lists.end(),heapcomp); } } return result->next;}
130 / 130 test cases passed.
Runtime: 39 ms
思路:
算法非原创,而是在leetcode的discuss里面的解。参考了几个解,认为这两个解比较好。
算法都是很经典的算法了,接下来分析下算法的复杂度。
第一种是分治算法,用队列代替迭代,设k个list,平均长度为n,每层要算kn次,层数为logk,因此算法复杂度为O(knlogk).
第二种是堆排序算法,在堆数组里第一个是值最大的元素,因此修改了一下比较规则,让值最小的节点出现在第一位。每取一个节点都要将该list重新放回数组,放回一次需要logk步,共要取kn个,因此算法复杂度是O(knlogk)
0 0
- LeetCode 23. Merge k Sorted Lists 【hard】
- leetcode 23. Merge k Sorted Lists(Hard)
- LeetCode 23. Merge k Sorted Lists [hard]
- [Leetcode 23, Hard] Merge k Sorted Lists
- 【Hard】23. Merge k Sorted Lists
- 23. Merge k Sorted Lists Hard
- [LeetCode] 023. Merge k Sorted Lists (Hard) (C++/Java/Python)
- Leetcode OJ 23 Merge k Sorted Lists [Hard]
- leetcode 23. LeetCode Merge k Sorted Lists
- [LeetCode]23.Merge k Sorted Lists
- LeetCode --- 23. Merge k Sorted Lists
- LeetCode 23.Merge k Sorted Lists
- [Leetcode] 23. Merge k Sorted Lists
- 【LeetCode】23.Merge k Sorted Lists
- [leetcode] 23.Merge k Sorted Lists
- Leetcode-23.Merge k Sorted Lists
- [Leetcode]23. Merge k Sorted Lists @python
- leetcode 23. Merge k Sorted Lists
- Android中事件传递机制的总结
- CreateProcess 创建explorer.exe失败的原因简单分析
- ThinkPHP单字母函数(快捷方法)使用总结
- SVD和PCA
- 类型检测
- LeetCode 23. Merge k Sorted Lists 【hard】
- spring注解方式读取properties文件中值
- logstash-out-elasticsearch 设置geo_point格式
- Kinect for Windows 体系构架
- update语句更新时和其他的表联合查询
- javascript优缺点
- Dubbo与Zookeeper、SpringMVC整合和使用
- linux中常见的>/dev/null 2>&1的作用
- 【自定义View】自定义View之炫丽CheckBox