Merge K Sorted List(含Merge Two Sorted LIst) leetcode java
问题描述:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
分析:
将k个sorted list合并为一个sorted list
借鉴归并排序的方法,自顶向下,先递归地对链表的前半部分和后半部分进行归并排序,最后再merge.
二分时,mid = (len - 1)/ 2,这样划分更为均匀,而不是 len / 2
算法:
/**
* 方法一、LinkNode数组
* 时间复杂度O(nlogk)
* @param list
* @return
*/
public static LinkNode mergeKSortedList(LinkNode[] list){
if(list == null || list.length == 0)
return null;
int len = list.length;
if(len == 1)
return list[0];
int mid = (len - 1)/ 2; //二分的时候,注意 mid = (len - 1) / 2,而不是 len/2,因为后者平分不均匀,前一种划分更为合理
LinkNode[] list1 = new LinkNode[mid + 1] ;
LinkNode[] list2 = new LinkNode[len - mid - 1] ;
for(int i = 0 ;i < list1.length ; i++)
list1[i] = list[i];
for(int j = list1.length ;j < len;j++)
list2[j - list1.length] = list[j];
LinkNode l1 = mergeKSortedList(list1);
LinkNode l2 = mergeKSortedList(list2); return mergeTwoSortedList(l1,l2);
} //方法二、List<LinkNode> 存储k个sorted list的头结点
public static LinkNode mergeKSortedList_1(List<LinkNode> lists){
if(lists == null || lists.size() == 0)
return null;
if(lists.size() == 1)
return lists.get(0);
int len = lists.size(); int mid = (len - 1) / 2;
List<LinkNode> list1 = lists.subList(0, mid + 1);
List<LinkNode> list2 = lists.subList(mid + 1, len);
LinkNode l1 = mergeKSortedList_1(list1);
LinkNode l2 = mergeKSortedList_1(list2); return mergeTwoSortedList(l1, l2);
} //两个链表链接
public static LinkNode mergeTwoSortedList(LinkNode l1,LinkNode l2){ LinkNode head = new LinkNode(0); //创建一个头结点,最后还要删掉
LinkNode p = head;
while(l1 != null && l2 != null){
if(l1.val <= l2.val){
p.next = l1;
l1 = l1.next;
} else{
p.next = l2;
l2 = l2.next;
}
p = p.next;
} p.next = (l1 != null) ? l1 : l2;
return head.next;// head的下一个节点是第一个数据结点
}
Merge K Sorted List(含Merge Two Sorted LIst) leetcode java的更多相关文章
- [LeetCode] Merge k Sorted Lists 合并k个有序链表
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 这 ...
- No.023:Merge k Sorted Lists
问题: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexit ...
- Merge k Sorted Lists
1. Merge Two Sorted Lists 我们先来看这个 问题: Merge two sorted linked lists and return it as a new list. The ...
- LeetCode:Merge k Sorted Lists
题目链接 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexi ...
- 71. Merge k Sorted Lists
Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...
- Merge k Sorted Lists Leetcode Java
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 Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...
- [leetcode 23]Merge k Sorted Lists
1 题目 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexi ...
- 【Leetcode】【Hard】Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 解 ...
随机推荐
- 集合00_Java集合框架
集合类概述 1.继承树 2.集合和数组 区别如下: 数组可以存储基本数据类型,也可以存储引用类型:而集合只能存储引用类型(比如存储int,它会自动装箱成Integer) 数组长度固定,集合长度可变 3 ...
- Visual studio 离线安装
VS2017在下载好安装程序安装的时候,会根据你选择的功能模块来下载所需要的安装程序,而这些安装程序的下载位置并不会让你选择,而是直接放在 C:\ProgramData\Microsoft\Visua ...
- No mapping found for HTTP request with URI [/Portal/download] in DispatcherServlet with name 'springmvc'
本文为博主原创,未经允许不得转载: 遇到这个异常,总结一下这个问题发生的原因: 这个原因是在springmvc中在DispatcherServlet分发请求时,解析不到相应的请求路径.后台要请求的路径 ...
- jvm 内存溢出问题排查方法
如果你做TCP通讯或者map集合操作,并发处理等功能时,很容易出现 Java 内存溢出的问题.本篇文章,带领大家深入jvm,分析并找出jvm内存溢出的代码. jvm中除了程序计数器,其他的区域都有可能 ...
- algorithm.sty not found error in LaTeX 解决方法
参考: algorithm.sty not found error in LaTeX algorithm.sty not found error in LaTeX 解决方法 错误日志: LaTeX E ...
- Ubuntu 14.04 上安装 Gurobi
参考: Installing Gurobi 7 on Linux Ubuntu 14.04 上安装 Gurobi 1.在gurobi上创建一个账户,并登陆: 2.从gurobi optimizer上下 ...
- Leetcode_Easy_14
编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". class Solution { public String longestCommonP ...
- markdown一些网站
1.https://stackedit.io/editor 2.https://github.com/bioinformatist/LncPipeReporter 3.
- hdu 3861 The King’s Problem trajan缩点+二分图匹配
The King’s Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- linux c/c++ 获取文件大小
linux c/c++ 获取文件大小 #include <sys/stat.h> int FileSize(const char* fname) { struct stat statbuf ...