[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个已经排好序的链表整合到一个链表中,并且这个链表是排了序的. 题解 ...
 
随机推荐
- nginx 日志分割
			
利用 crontab + shell 来实现nginx的 access log 按天切割,便于统计.具体实现如下: shell: #! /bin/sh NGINX_DIR=/data/apps/ngi ...
 - 创建一个swift项目
			
笔者认为你已经有了oc的开发基础,流程是一样的,选择开发语言为swift即可.这里主要说明一下一些常用的配置: 一般我们不使用XIB和storyboard,所以在系统自动创建的文件中删除main.st ...
 - Easyui CSS式样重写
			
<link rel="stylesheet" type="text/css" href="../../themes/default/easyui ...
 - C# 數據事務操作
			
public sealed class SQLFunc { #region Methods #region OpenConnection /// <summary>指定包含連接字串的字串 ...
 - 使用fastcgi_finish_request提高页面响应速度
			
当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法. 按照文档上的说法,此方法可以提高请求的处理速度,如果有些处理可以在页面生成完后再进 ...
 - PHP世纪万年历
			
<? //世纪万年历 #这是唯一的设置-请输入php文件的位置 $file="http://192.168.1.168/php/rl/s2m.php"; //#农历每 ...
 - 移动端调试工具-Weinre
			
java版本安装和调试 首先需要下载 weinre, weinre目前支持Windows与MacOS, 本文中以Windows版为例. 下载地址:http://people.apache.org/~p ...
 - asp.net GDI+绘制折线
			
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
 - buildroot 使用小记 - 2   源文件目录结构
			
官方下载下来的buildroot源码包在解压后,是一个名为buildroot的文件夹,它下面的目录/文件结构如下: Makefile - 顶级makefile,编译总入口 Config.in - 顶级 ...
 - js window.open() 父窗口与子窗口的互相调用(未必有用)
			
javascript 父窗口与子窗口的互相调用 <html> <head></head> <body> 主要实现父子关系的页面 window.opene ...