[leetcode 23]Merge k Sorted Lists
1 题目
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
2 思路
当时看到这个题目就想到的是归并排序。好吧,但是,具体代码写不出来。题目给的是数组:public ListNode mergeKLists(ListNode[] lists),我就想,怎么归并排序,然后返回一个已经排好的,再进行递归。想破脑袋没想出来。
原来,可以赋值给一个ArrayList,然后,List还有一个牛逼的方法:lists.subLists(int i,int j)方法,前面的是包括,后面的是不包括,天然的用于分治策略啊。
看的别人代码链接:
https://leetcode.com/discuss/10012/a-solution-use-divide-and-conquer-algorithm-in-java
https://leetcode.com/discuss/9279/a-java-solution-based-on-priority-queue
3 代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
private ListNode mergeTwoLists(ListNode l1, ListNode l2)
{
if(l1 == null){
return l2;
}
if(l2 == null){
return l1;
}
ListNode head = new ListNode(0);
ListNode node = head; ListNode list1 = l1;
ListNode list2 = l2; while(list1 != null && list2 != null){
if(list1.val > list2.val){
node.next = list2;
list2 = list2.next;
}else{
node.next = list1;
list1 = list1.next;
}
node = node.next;
} /* connect the longer list */
if(list1 != null){
node.next = list1;
}
if(list2 != null){
node.next = list2;
} return head.next;
} public ListNode mergeKLists(List<ListNode> lists) {
if(lists.size()==0) return null;
if(lists.size()==1) return lists.get(0);
if(lists.size()==2) return mergeTwoLists(lists.get(0),lists.get(1)); ListNode node1 = mergeKLists(lists.subList(0,lists.size()/2));
ListNode node2 = mergeKLists(lists.subList(lists.size()/2,lists.size())); return mergeTwoLists(node1,node2);
} public ListNode mergeKLists(ListNode[] lists){
List<ListNode> list = new ArrayList<>();
for(ListNode node : lists){
list.add(node);
}
return mergeKLists(list);
} }
看别人的代码,发现还有一个更简洁的递归写法:
return mergeTwoLists(mergeKLists(lists.subList(0, lists.size()/2)), mergeKLists(lists.subList(lists.size()/2, lists.size())));
感觉像是 调用一个递归,然后参数还是递归。屌爆了,希望将来能培养出这种思路和写法来。
[leetcode 23]Merge k Sorted Lists的更多相关文章
- 蜗牛慢慢爬 LeetCode 23. Merge k Sorted Lists [Difficulty: Hard]
题目 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...
- [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 ...
- [LeetCode] 23. Merge k Sorted Lists ☆☆☆☆☆
转载:https://leetcode.windliang.cc/leetCode-23-Merge-k-Sorted-Lists.html 描述 Merge k sorted linked list ...
- LeetCode 23 Merge k Sorted Lists(合并k个有序链表)
题目链接: https://leetcode.com/problems/merge-k-sorted-lists/?tab=Description Problem: 给出k个有序的list, 将其进行 ...
- Java [leetcode 23]Merge k Sorted Lists
题目描述: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complex ...
- [leetcode]23. Merge k Sorted Lists归并k个有序链表
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. I ...
- [LeetCode] 23. Merge k Sorted Lists ☆☆
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 解 ...
- [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 ...
- leetcode 23. Merge k Sorted Lists(堆||分治法)
Merge k sorted linked lists and return it as one sorted list. 题意:把k个已经排好序的链表整合到一个链表中,并且这个链表是排了序的. 题解 ...
随机推荐
- NHibernate系列文章十三:NHibernate批量更新
摘要 对于批量插入和批量修改数据,通过设置NHibernate配置文件的BatchSize属性,可以大量减少NHibernate与数据库交互的次数. 1. Batch属性介绍 设置了BatchSize ...
- Windows程序设计(第五版)学习:第三章 窗口与消息
第三章 窗口与消息 1,windows窗口过程:应用程序所创建的每一个窗口都有一个与之关联的窗口过程,用于处理传递给窗口的消息. 2,窗口依据窗口类来创建.窗口类标识了用于处理传递给窗口的消息 ...
- JAXB 2.0 API is being loaded from the bootstrap classloader
在使用webservice,mule esb等需要jaxb的项目里经常会出现 JAXB 2.0 API is being loaded from the bootstrap classloader这个 ...
- BootLoader 详解(1)
1. Boot Loader的概念 BootLoader就是在操作系统内核运行前之前运行的一段小程序.通过这段小程序,可以初始化硬件设备.建立内存空间映射图,从而将系统的软硬件带到一个合适的状态,以便 ...
- getpid 与 gettid 与 pthread_self
获取进程的PID(process ID) #include <unistd.h> pid_t getpid(void); 获取线程的TID(thread ID) 1)gettid或者类似g ...
- Abstract Factory(抽象工厂)模式
1.意图 提供一个创建一系列相关或相互依赖对象的接口,而无需制定它们具体的类. 2.适用性 一个系统要独立于它的产品创建.组合和表示时. 一个系统要由多个产品系列中的一个来配置时. 当你强调一系列相关 ...
- 在Linux中的文本模式下手动安装 Parallels Tools
1.启动虚拟机. 2.当看到提示 X Server 无法启动的消息时,使用 Ctrl+Option+F1(Ctrl+Alt+F1)切换到另一个虚拟控制台并输入登录信息. 3 从“虚拟机”菜单中选择“安 ...
- Open Live Writer的配置
--------siwuxie095 1.首先到官网下载OLW:http://openlivewriter.org/ 2.选择 Other services 3.填写"博客地址". ...
- [aspx]控件及代码小例
1. 原生 asp 方式遍历 DataTable 2. aspx 的控件 Repeater 后台绑定 <%-- DataTable dt = OleDbHelper.GetTable(&quo ...
- 安全关闭多Activity的Application
1.发送广播给每一个打开的Activity. 2.采用startActivityForResult()方法递归关闭. 3.使用EventBus框架的监听者模式,关闭时触发监听事件.