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 解决报告的更多相关文章

  1. LeetCode: Merge k Sorted Lists 解题报告

    Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...

  2. [LeetCode] Merge k Sorted Lists 合并k个有序链表

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 这 ...

  3. 【原创】leetCodeOj --- Merge k Sorted Lists 解题报告

    题目地址: https://oj.leetcode.com/problems/merge-k-sorted-lists/ 题目内容: /** * Definition for singly-linke ...

  4. LeetCode:Merge k Sorted Lists

    题目链接 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexi ...

  5. LeetCode——Merge k Sorted Lists

    Discription: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its ...

  6. leetcode -- Merge k Sorted Lists add code

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. [ ...

  7. LeetCode Merge k Sorted Lists (链表)

    题意 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...

  8. [Leetcode] Merge k sorted lists 合并k个已排序的链表

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 思 ...

  9. 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 ...

随机推荐

  1. Zoj 3545 Rescue the Rabbit(ac自己主动机+dp)

    标题效果: 鉴于DNA有一个正确的顺序值.请构造一个长度I的DNA在这个序列使DNA正确的顺序值极大.它被认为是负的输出噼啪. .. IDEAS: 施工顺序是,ac己主动机上走,求最大要用到dp dp ...

  2. C#读取excel等表格常用方法

    0. 利用NPOI. 请查阅此插件的相关文档. 1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下: 1 2 3 4 5 6 7 8 9 10 ...

  3. ZeroMQ注意事项

    Request-Reply状态 供client它必须是严肃的格在根据第一呼叫zmq_send() 函数,然后调用zmq_recv()函数的顺序来运行 对于server来说,运行时序相反 假设不依照这个 ...

  4. 【剑指offer】第一个字符只出现一次

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/27106997 题目描写叙述: 在一个字符串(1<=字符串长度<=10000,所 ...

  5. JList用法小结

    JList用法小结 分类: JAVA技术2007-08-11 01:02 18485人阅读 评论(11) 收藏 举报 stringvectorclassjavaactionobject         ...

  6. DMA为什么比轮询、中断方式性能要卓越非常多?(你不懂)

    本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/35735397 假设是计算机专业出身的同学,都听过一个 ...

  7. android cocos2dx游戏-加入截图和分享微博功能

    本文介绍怎样在游戏中添加分享功能,截屏后分享到微博及其他社交网络的功能. public class ShareSupport { // when you want to use share(),fir ...

  8. Linux tcpdump命令具体解释

    简单介绍 用简单的话来定义tcpdump,就是:dump the traffic on a network,依据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump能够将网络中传送的数据 ...

  9. mac提升yosemite后php 扩展修复

    mac升级之后 php 正积极提升自己,导致php环境破坏 所以 例如有以下几点需要修复 1. sudo ln -s /Applications/Xcode.app/Contents/Develope ...

  10. 参加persist.sys物业写权限的方法

    1.于AndroidManifest.xml manifest添加属性android:sharedUserId="android.uid.system" 2.假设AndroidMa ...