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. 解 ...
随机推荐
- POJ1741 Tree(树分治——点分治)题解
题意:给一棵树,问你最多能找到几个组合(u,v),使得两点距离不超过k. 思路:点分治,复杂度O(nlogn*logn).看了半天还是有点模糊. 显然,所有满足要求的组合,连接这两个点,他们必然经过他 ...
- CssClass="Hidden"和Visible="False"
<asp:Label ID="lblNoCustomTableItemCheckedInfo" runat="server" CssClass=" ...
- 论文笔记:Diffusion-Convolutional Neural Networks (传播-卷积神经网络)
Diffusion-Convolutional Neural Networks (传播-卷积神经网络)2018-04-09 21:59:02 1. Abstract: 我们提出传播-卷积神经网络(DC ...
- CommandLine exe参数
[Verb("OptionsEntity")] public class OptionsEntity { [Option('a', HelpText = "Plantfo ...
- strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数
strcpy函数: char *strcpy(char *Dest , const char *Src) { assert((Dest != NULL) && (Src != NULL ...
- 利用React Native 从0到1 开发一款兼容IOS和android的APP(仿造京东)
最近有一部电视剧叫做<微微一笑很傻逼>里面有个男猪脚,人们都叫他大神~我觉得吧~大神是相对的~所以~啥事都得谦虚! 好了 今天介绍的是如何从0到1利用React Native开发一款兼容I ...
- 【BZOJ】3295: [Cqoi2011]动态逆序对
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3295 mamaya,弱鸡xrdog终于会写树套树啦.... 将树状数组中每一个节点看成一棵 ...
- 单源最短路——Dijkstra模板
算法思想: 类似最小生成树的贪心算法,从起点 v0 每次新拓展一个距离最小的点,再以这个点为中间点,更新起点到其他点的距离. 算法实现: 需要定义两个一维数组:①vis[ i ] 表示是否从源点到顶点 ...
- tornado关于AsyncHTTPClient的使用笔记
先来一段同步的httpclient使用代码 url = 'https://www.baidu.com/' http_client = HTTPClient() response = http_clie ...
- ros 节点关闭后重启
加入参数 respawn="true"