【Leetcode】之Merge k Sorted Lists
来源:互联网 发布:淘宝评价流程图 编辑:程序博客网 时间:2024/05/16 08:50
一.问题描述
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
二.我的解题思路
之前是做过merge 2 sorted list的题目,所以拿到这个题目,很自然的想法就是采用分治递归法,将原问题转换成多个merfe 2的问题求解。但是结果超时了,这种分治再合并的算法的时间复杂度是O(2n+3n+…+kn)=O(nk²),
接下来就是思考优化。遗憾的是,我自己的思维局限在了如何利用merge 2的结果,最大限度减少merge的耗时上,想了一会没有想到太好的思路。
上网查阅资料,发现别人是用排序问题的思路来解决这个问题。首先取k个链表的头元素,求取最小的元素,将其设为结果链表的头结点。然后维护一个最小堆结构,这种做法的复杂度是O(n*k*logk),测试通过的程序如下:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */#define LN ListNode*#define HEAP heap.begin(),heap.end()#define PB push_back#define INF 1000000struct node{ int val; LN from; node(ListNode* n) { if ( n==NULL ) { val=INF; } else { val=n->val; } from=n; } bool operator<(const node& other)const { return val<other.val; } bool operator>(const node& other)const { return val>other.val; }};class Solution {public: ListNode *mergeKLists(vector<ListNode *> &lists) { // Start typing your C/C++ solution below // DO NOT write int main() function if (lists.empty()) return NULL; int n= lists.size(); vector<node> heap; heap.reserve(n); for( int i=0;i<n;i++) heap.PB(node(lists[i])); make_heap(HEAP,greater<node>()); LN head= new ListNode(0); LN pL = head; pop_heap(HEAP,greater<node>()); node small=heap.back(); heap.pop_back(); while(small.val!=INF) { LN next=small.from->next; pL->next=small.from; small.from->next=NULL; pL=pL->next; heap.PB(node(next)); push_heap(HEAP,greater<node>()); pop_heap(HEAP,greater<node>()); small=heap.back(); heap.pop_back(); } LN ret=head->next; delete head; return ret; }};
0 0
- LeetCode之Merge k Sorted Lists
- LeetCode之Merge k Sorted Lists
- LeetCode之Merge K Sorted Lists
- leetcode之Merge k Sorted Lists
- leetcode 之 Merge k Sorted Lists
- LeetCode之Merge k Sorted Lists
- 【Leetcode】之Merge k Sorted Lists
- leetcode之Merge k Sorted Lists
- LeetCode之23---Merge k Sorted Lists
- LeetCode: Merge k Sorted Lists
- LeetCode Merge k Sorted Lists
- LeetCode: Merge k Sorted Lists
- [Leetcode] Merge k Sorted Lists
- [Leetcode] Merge k Sorted Lists
- [Leetcode] Merge K sorted lists
- [LeetCode]Merge k Sorted Lists
- [LeetCode] Merge k Sorted Lists
- LeetCode-Merge k Sorted Lists
- 图片垂直水平居中 支持IE6、IE7、IE8、FF等
- 使用ngrok让微信公众平台通过80端口访问本机
- Java Web Service-CXF -基于Restful的Web服务
- 死锁如何产生?
- Impala hive hbase 整合
- 【Leetcode】之Merge k Sorted Lists
- 分分钟学习编写高效的 Android 代码
- ASP.NET WebService的图片验证码服务
- SharedPreference判断应用是否是第一次启动
- 关于C++的容器
- oracle11g 导出空表
- There is only one kind of failure,that is to give up halfway.
- xxx.tar.xz文件如何解压
- 乐视云视频PHP接口操作视频上传,编辑,查询以及删除