LeetCode Merge k Sorted Lists 解决报告
https://oj.leetcode.com/problems/merge-k-sorted-lists/
归并K已经整理阵列,和分析算法的复杂。
解决报告:无论是不考虑优化,最简单的实现是要重新走路List<ListNode>。对当中每一个链表同当前链表做一遍类似于归并排序最后一步的merge操作。
算法复杂度是O(KN)
public class Solution {
ListNode mergeTwoLists(ListNode list1, ListNode list2) {
ListNode head = new ListNode(-1);
ListNode current = head;
while(list1!=null&&list2!=null) {
if(list1.val<list2.val) {
current.next = list1;
list1 = list1.next;
} else {
current.next = list2;
list2 = list2.next;
}
current = current.next;
}
if(list1!=null) {
current.next = list1;
} else {
current.next = list2;
}
return head.next;
}
public ListNode mergeKLists(List<ListNode> lists) {
if(lists==null||lists.size()==0) {
return null;
}
ListNode head = lists.get(0);
for(int i=1;i<lists.size();i++) {
head = mergeTwoLists(head, lists.get(i));
}
return head;
}
}
上面的方法TLE了,上网查了一下注意到通过使用归并排序算法可将链表排序的时间复杂度缩减到的O(NlgN)。详细的计算公式就是:
所以借鉴归并排序的方法,自顶向下,先递归的对链表的前半部分和后半部分进行归并排序,最后再merge。
下面代码顺利AC了,时间复杂度为:O(NlogK)
public class Solution {
ListNode merge2Lists(ListNode list1, ListNode list2) {
ListNode head = new ListNode(-1);
ListNode current = head;
while(list1!=null&&list2!=null) {
if(list1.val<list2.val) {
current.next = list1;
list1 = list1.next;
} else {
current.next = list2;
list2 = list2.next;
}
current = current.next;
}
if(list1!=null) {
current.next = list1;
} else {
current.next = list2;
}
return head.next;
}
public ListNode mergeKLists(List<ListNode> lists) {
if(lists==null||lists.size()==0) {
return null;
}
if(lists.size()==1) {
return lists.get(0);
}
int length = lists.size() ;
int mid = (length - 1)/2 ;
ListNode l1 = mergeKLists(lists.subList(0,mid + 1)) ;
ListNode l2 = mergeKLists(lists.subList(mid + 1,length)) ;
return merge2Lists(l1,l2) ;
}
}
版权声明:本文博主原创文章,博客,未经同意不得转载。
LeetCode Merge k Sorted Lists 解决报告的更多相关文章
- LeetCode: Merge k Sorted Lists 解题报告
Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...
- [LeetCode] Merge k Sorted Lists 合并k个有序链表
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 这 ...
- 【原创】leetCodeOj --- Merge k Sorted Lists 解题报告
题目地址: https://oj.leetcode.com/problems/merge-k-sorted-lists/ 题目内容: /** * Definition for singly-linke ...
- LeetCode:Merge k Sorted Lists
题目链接 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexi ...
- LeetCode——Merge k Sorted Lists
Discription: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its ...
- leetcode -- Merge k Sorted Lists add code
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. [ ...
- LeetCode Merge k Sorted Lists (链表)
题意 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...
- [Leetcode] Merge k sorted lists 合并k个已排序的链表
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 思 ...
- LeetCode: Merge Two Sorted Lists 解题报告
Merge Two Sorted Lists Merge two sorted linked lists and return it as a new list. The new list shoul ...
随机推荐
- C++程序代写实现HashSet class
C++程序代写实现HashSet class 专业程序代写(QQ:928900200) Implement a HashSet class for elements of type string.It ...
- Java、PHP训练场地选择成都传祺播客
传智播客选择九类基础: 1 有不怕炫耀实力,我们会爱一本书,是一个开源项目 2 领先的新技术,让我们的学生走在别人前面,首先推出Hadoop.Unity3D.Nginx. 3 课程广博的知识,深入的技 ...
- Docker部署JavaWeb项目实战(转)
摘要:本文主要讲了如何在Ubuntu14.04 64位系统下来创建一个运行Java web应用程序的Docker容器. 一.下载镜像.启动容器 1.下载镜像 先查看镜像 docker images 记 ...
- android学习经常使用的数据文件夹
android工程实践 1.仿360一键清理实现(一) "一键清理"是一个桌面图标,点击图标后,显示一个视图.进行清理动画.之后显示清理了几个进程,释放了多少M内存.点击" ...
- GCD code block
在这里积累一些片段,由于备忘录. + (DRClass *)sharedDR{ //创建小黑.正常ap模式仅仅有一个小黑,so static DRClass *aDR = nil; static di ...
- Android自己主动化測试——CTS測试
一.为什么须要兼容性測试(下面称CTS)? 1.1.让APP提供更好的用户体验.用户能够选择很多其它的适合自己设备的APP.让APP更稳定. 1.2.让开发人员设计更高质量的APP. 1.3.通过CT ...
- iOS的图表显示的实现
在app通常有家居展览的照片,显示广告.或者头条新闻.通常网易新闻client 如图,红框框的位置就是一个典型的图展, 熟悉iOS的人肯定知道,这个是个UIScrollview,里面加几张图片就可以实 ...
- Android复制iPhone日期和时间选择器
看效果图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZ2xvbmd4aW4yNA==/font/5a6L5L2T/fontsize/400/fi ...
- POJ 3177 Redundant Paths - from lanshui_Yang
Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...
- 获取Winform窗体、工作区 宽度、高度、命名空间、菜单栏高度等收集
MessageBox.Show("当前窗体标题栏高"+(this.Height - this.ClientRectangle.Height).ToString());//当前窗体标 ...