[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个已经排好序的链表整合到一个链表中,并且这个链表是排了序的. 题解 ...
随机推荐
- wget cooikes 下载
2.下来用wget带cookie的命令下载,命令如下: wget -c –load-cookies=cookies.txt ”下载地址” -O “文件名” & [文件名处自己命名 ...
- AngularJS 教程
AngularJS 教程 AngularJS 通过新的属性和表达式扩展了 HTML. AngularJS 可以构建一个单一页面应用程序(SPAs:Single Page Applications). ...
- Inside The C++ Object Model - 02
前言 - 什么是C++对象模型 C++对象模型包括2个方面的含义: 1.语言中直接支持面向对象程序设计的部分 2.对于各种(面向对象)支持的底层实现机制. 无论是什么语言,都需要转换为汇编.很多面向对 ...
- 第五百八十天 how can I 坚持
一定要稳住啊,怎么感觉心神不宁呢.哎.越是这种情况越能考验一个人吧. 说都会说,做起来真的好难啊. 今天上班一天都感觉心神不宁的.到底是哪出了问题,事情太多了.好吧,是挺多的,考研.上班,还得考虑结婚 ...
- 炫酷的时钟--canvas初体验
先啥也不说:来张效果图 我是根据:http://www.imooc.com/learn/133 这里的课程进行学习的.大大的感谢liuyubobobo老师的深入浅出的讲解!! 我在这里仅仅提供我自己的 ...
- Scrum 项目——1
广商检索页面 1) N (Need 需求) 这个页面会按一定的规律来集合广商的一些资源,包括微信公众号.教务系统登录处.宿舍报修等,是为了方便我们整个广商的学生和老师来运用.因为现在虽然有很多微信公众 ...
- for 循环
#include <iostream> int main(){ ; ; val <= ; ++val) { sum += val; } std::cout << &quo ...
- 生成prefix.pch文件
(借鉴网络资源)
- rutime中动态调用类的方法
Dynamically invoke a class method in Objective C 代码 #import <Foundation/Foundation.h> #import ...
- RabbitMQ 学习记录
rabbit mq知识点:1.消费时可以通过acknowledge设定消费是否成功,消费不成功时在server端requeue2.需要注意两个持久化:queue持久化和消息持久化(通过代码设定,默认即 ...