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的更多相关文章

  1. 蜗牛慢慢爬 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 ...

  2. [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 ...

  3. [LeetCode] 23. Merge k Sorted Lists ☆☆☆☆☆

    转载:https://leetcode.windliang.cc/leetCode-23-Merge-k-Sorted-Lists.html 描述 Merge k sorted linked list ...

  4. LeetCode 23 Merge k Sorted Lists(合并k个有序链表)

    题目链接: https://leetcode.com/problems/merge-k-sorted-lists/?tab=Description Problem: 给出k个有序的list, 将其进行 ...

  5. Java [leetcode 23]Merge k Sorted Lists

    题目描述: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complex ...

  6. [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 ...

  7. [LeetCode] 23. Merge k Sorted Lists ☆☆

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 解 ...

  8. [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 ...

  9. leetcode 23. Merge k Sorted Lists(堆||分治法)

    Merge k sorted linked lists and return it as one sorted list. 题意:把k个已经排好序的链表整合到一个链表中,并且这个链表是排了序的. 题解 ...

随机推荐

  1. $.when().then()

    当两个Ajax请求是成功的则执行函数myFunc,如果任一个有错误则执行myFailure. $.when($.ajax("/page1.php"), $.ajax("/ ...

  2. NK3C 业务权限控制

    资源中,添加了一个类型:权限(橙色显示),现在有4种数据: 域管理员:domainAdmin 组织管理员:orgAdmin 组管理员:groupAdmin 一线员工:phoneAdmin 权限控制可以 ...

  3. Android 环境常见问题

    1.启动adb时报: adb server is out of data.kill... ADB server didn't ACK    *failed to start daemon*    er ...

  4. Ubuntu14.04通过pyenv配置多python

    参考链接: https://github.com/yyuu/pyenv-virtualenv https://github.com/yyuu/pyenv http://seisman.info/pyt ...

  5. LESS 学习记录(简单入门)

    什么是 LESS LESS是一种动态样式语言,属于 CSS 预处理语言的一种.它使用类似 CSS 的语法,但是 赋予了动态语言的特性,比如变量.继承.运算.函数等,方便 CSS 的编写和维护. 使用 ...

  6. 随笔—邀请赛前训— Codeforces Round #330 (Div. 2) Vitaly and Night

    题意:给你很多对数,要么是0要么是1.不全0则ans++. 思路即题意. #include<cstdio> #include<cstring> #include<iost ...

  7. error C2065: 'INVALID_SET_FILE_POINTER' : undeclared identifier

    Searching MSDN for that constant brings up one result: it's a failure code for SetFilePointer() and ...

  8. mysql 大小写 整理

    mysql字段的值默认不区分大小写,如果有主键的表,主键列就不能插入重复的值(大小写不同) 实验 默认方式创建 CREATE TABLE `t1` ( `ID` varchar(40) CHARACT ...

  9. aix 6+ mount 光驱

    AIX 挂载光驱的方法 系统环境: [root@Big A:/1]#oslevel -s6100-06-00-0000 [root@Big A:/]#crfs -v cdrfs -p ro -d '/ ...

  10. ycsb-命令及参数-与生成的负载类型相关

    loadbin/ycsb load mydb -P workloads/workloada -p "mydb.host=127.0.0.1" -p "mydb.port= ...