题目:

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

题解:

Merge k sorted linked list就是merge 2 sorted linked list的变形题。

而且我们很自然的就想到了经典的Merge Sort,只不过那个是对数组进行sort。而不同的地方,仅仅是Merge两个list的操作不同。

这里来复习一下Merge Sort(对于数组操作),参考Wikipedia:

归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。

归并操作的过程如下:

  1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
  2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置
  3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
  4. 重复步骤3直到某一指针到达序列尾
  5. 将另一序列剩下的所有元素直接复制到合并序列尾
最差時間複雜度
最優時間複雜度
平均時間複雜度
最差空間複雜度

Merge Sort 对数组操作的Java代码为:

 1 public int[] mergeSort(int[] arr){
 2     if(arr.length<2||arr == null)
 3         return arr;
 4     
 5     MSort(arr,0,arr.length-1);
 6 }
 7 
 8 public int[] MSort(int[] arr, int low, int high){
 9         if(low < high){
10                 int mid = (low+high)/2;
11                 int[] left = MSort(arr,low,mid);
12                 int[] right = MSort(arr,mid+1,high);
13                 return mergeTwoList(left,right);
14           }  
15 }
16 
17 
18 public int[] mergeTwoList(int[] A, int[] B) {
19     int[] C = new int[A.length + B.length];
20     int k = 0;
21     int i = 0;
22     int j = 0;
23     while(i < A.length && j < B.length) {
24         if (A[i] < B[j])
25             C[k++] = A[i++];
26         else
27             C[k++] = B[j++];
28     }
29     while (i < A.length) 
30         C[k++] = A[i++];
31     while (j < B.length) 
32         C[k++] = B[j++];
33     return C;
34 }

下面就是这道题的解法,跟上面的方法一样一样的,就是在mergeTwoList时候是对linkedlist做,套用Merge 2 sorted list解法即可,代码如下:

 1     public ListNode mergeKLists(ArrayList<ListNode> lists) {  
 2         if(lists==null || lists.size()==0)  
 3             return null;  
 4         return MSort(lists,0,lists.size()-1);  
 5     }  
 6     
 7     public ListNode MSort(ArrayList<ListNode> lists, int low, int high){  
 8         if(low < high){  
 9             int mid = (low+high)/2;
10             ListNode leftlist = MSort(lists,low,mid);
11             ListNode rightlist = MSort(lists,mid+1,high);
12             return mergeTwoLists(leftlist,rightlist);  
13         }  
14         return lists.get(low);  
15     }
16 
17 
18     public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
19             if(l1==null)
20                 return l2;
21             if(l2==null)
22                 return l1;
23                 
24             ListNode l3;
25             if(l1.val<l2.val){
26                 l3 = l1;
27                 l1 = l1.next;
28             }else{
29                 l3 = l2;
30                 l2 = l2.next;
31             }
32             
33             ListNode fakehead = new ListNode(-1);
34             fakehead.next = l3;
35             while(l1!=null&&l2!=null){
36                 if(l1.val<l2.val){
37                     l3.next = l1;
38                     l3 = l3.next;
39                     l1 = l1.next;
40                 }else{
41                     l3.next = l2;
42                     l3 = l3.next;
43                     l2 = l2.next;
44                 }
45             }
46             
47             if(l1!=null)
48                 l3.next = l1;
49             if(l2!=null)
50                 l3.next = l2;
51             return fakehead.next;
52         }

更多Mergesort的讲法请参考:http://www.cs.princeton.edu/courses/archive/spr07/cos226/lectures/04MergeQuick.pdf

讲的挺好的

Merge k Sorted Lists leetcode java相关推荐

  1. Merge Two Sorted Lists leetcode java

    题目: Merge two sorted linked lists and return it as a new list. The new list should be made by splici ...

  2. LeetCode 之 JavaScript 解答第23题 —— 合并K个有序链表(Merge K Sorted Lists)

    Time:2019/4/10 Title: Merge K Sorted Lists Difficulty: Difficulty Author: 小鹿 题目:Merge K Sorted Lists ...

  3. 21.Merge Two Sorted Lists 、23. Merge k Sorted Lists

    21.Merge Two Sorted Lists 初始化一个指针作为开头,然后返回这个指针的next class Solution { public:ListNode* mergeTwoLists( ...

  4. 71. Merge k Sorted Lists

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

  5. [leetcode] Merge k Sorted Lists

    2019独角兽企业重金招聘Python工程师标准>>> Merge k sorted linked lists and return it as one sorted list. A ...

  6. 【leetcode刷题笔记】Merge k Sorted Lists

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

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

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

  8. 【LeetCode】【数组归并】Merge k Sorted Lists

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

  9. 合并k个有序链表 python_[LeetCode] 23. Merge k Sorted Lists 合并k个有序链表

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

最新文章

  1. 【汇总】ElementUI中高频次使用代码片段
  2. 超详细!带输入输出的十五至尊图你见过吗?
  3. 抛出错误Debug Assertion Failed!
  4. 使用 Proto 构建了一个简单但功能强大的 lambda 库的测试程序
  5. IntentService用法
  6. 《Java 8 in Action》Chapter 12:新的日期和时间API
  7. 一般来讲,大公司都有自己的决策团队
  8. Java基础之创建对象的五种方式
  9. 技术岗的职业规划_致程序员:30岁+的职业规划是什么?这些你必须知道!
  10. 餐饮水单打印软件_除了进销存,管家婆软件能做的很多!
  11. 智能汽车“增量部件”争夺战(一):以华为海思为样榜,比亚迪蔚来们的漫漫造芯路
  12. 【阅读百本英文原版书】—为提升英语运用能力—已看完77本
  13. 2012考研数学二第(21)题——中值定理:零点定理+数列极限:单调有界准则
  14. debezium报错处理系列七:The database history couldn‘t be recovered. Consider to increase the value for datab
  15. 创意、实现和合作:一次原创H5的尝试
  16. java进制转换代码
  17. 十一、MYSQL数据库备份还原
  18. Apache端口占用解决办法
  19. EZEMC测试软件_什么是EMC测试
  20. 计算机教师格言座右铭,教师励志格言座右铭100句

热门文章

  1. linux chattr修改文件属性,linux chattr(改变文件属性)
  2. 如何用python控制电脑的应用程序打不开_如果电脑中的一个应用程序打不开,点击图标没反应,能否将其强制打开...
  3. 回溯法 批处理作业调度_不懂调度系统架构,就不要谈银行数据仓库
  4. strip python里面是什么意思_python中的strip是什么意思
  5. 2020运动相机推荐_2020年最好的全景运动相机推荐
  6. 计算机竞赛湖北有哪些,我校29名学生在全国大学生数学竞赛湖北赛区获奖
  7. qt qtoolbutton 弹出菜单方向_QT使用教程(三)之安装篇
  8. python 安装包列表导出到 txt
  9. 数据操作语言DML及数据定义语言DDL的区别
  10. seven days later