leetcode-23-Merge k Sorted Lists
2016-05-11 22:17
537 查看
题意:合并k个有序链表。
tags:divide and conquer。分治算法。
思路:divide and conquer分治算法;在合并2个链表的基础上分治算法解决。每次处理2个链表。举例来说,6个的话,第一次循环处理1-4,2-5,3-6返回3个有序链表123,第二次处理1-3保存为1返回12,最后处理1-2;5个的话,第一次处理1-4,2-5返回12加上原有的3,后面处理一样。所以每次二分的k的取值举个例子试一下就知道了。这里n=(n+1)/2。n最后一次取2完成最后一次处理故循环条件为n〉1。
测试通过时间神奇的在32ms。一般为400ms。
空间复杂度o(1),时间复杂度为
o(nklog2k)
因为每次n/2都要遍历所有的点,即nk。次数x=log2k。
如果是开始想的最笨的依次合并的话,即1-2何必,然后合并3,合并4…….。这种时间复杂度为:
总共遍历的节点数目为n(2+3+…+k) = n*(k^2+k-2)/2, 因此时间复杂度是O(n*(k^2+k-2)/2) = O(nk^2)
tags:divide and conquer。分治算法。
思路:divide and conquer分治算法;在合并2个链表的基础上分治算法解决。每次处理2个链表。举例来说,6个的话,第一次循环处理1-4,2-5,3-6返回3个有序链表123,第二次处理1-3保存为1返回12,最后处理1-2;5个的话,第一次处理1-4,2-5返回12加上原有的3,后面处理一样。所以每次二分的k的取值举个例子试一下就知道了。这里n=(n+1)/2。n最后一次取2完成最后一次处理故循环条件为n〉1。
测试通过时间神奇的在32ms。一般为400ms。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* mergeKLists(vector<ListNode*>& lists) { int n = lists.size(); if(n==0) return NULL; while(n>1) { int k=(n+1)/2; for(int i =0;i<n/2;i++) //n的情况下只需要处理n/2个merge2Lists()。 { lists[i]=merge2Lists(lists[i],lists[i+k]); } n = k; // } return lists[0]; } ListNode* merge2Lists(ListNode* l1, ListNode* l2) { //合并2个有序链表 ListNode* p=new ListNode(0); ListNode* q=p; //q保存链表头部 while (l1 && l2) { if (l1->val >= l2->val) { p->next=l2; l2=l2->next; } else { p->next=l1; l1=l1->next; } p=p->next; //注意p指针也要后移 } if(l1) p->next=l1; if(l2) p->next=l2; return q->next; //从第二个node开始取,舍弃开始的0 } };
空间复杂度o(1),时间复杂度为
o(nklog2k)
因为每次n/2都要遍历所有的点,即nk。次数x=log2k。
如果是开始想的最笨的依次合并的话,即1-2何必,然后合并3,合并4…….。这种时间复杂度为:
总共遍历的节点数目为n(2+3+…+k) = n*(k^2+k-2)/2, 因此时间复杂度是O(n*(k^2+k-2)/2) = O(nk^2)
相关文章推荐
- idea 将工程项目打包成war
- hdu——1010Tempter of the Bone
- C++回车换行时停止读入
- 改进的经度坐标校正鱼眼图像算法_code
- iOS之XMPP环境搭建
- 如何用js得到当前页面的url信息方法(JS获取当前网址信息)
- ACL权限的学习
- r语言常用函数apply及subset函数
- 模板方法设计模式扩展(Hook Method)
- 三层学习之SQL2014数据库连接问题
- APP开发实战11-APP登录状态的维持
- FPGA:下一代机器人感知处理器
- React Native生命周期整理
- javaEE编程之自动登陆
- django框架从零开始_009_通用页面
- 手机开发实战8——GSM移动用户状态
- Android Dev Intro - Graphics architecture
- uefi制作启动盘
- 采集反爬虫网站,采集不到内容!
- HDU 3758