leetcode题解-23. Merge k Sorted Lists
来源:互联网 发布:淘宝手机端详情页装修 编辑:程序博客网 时间:2024/05/16 05:50
题意:合并k个有序的链表,分析描述算法的复杂度。
分析:这道题目在分布式系统中非常常见,来自不同client的sorted list要在central server上面merge起来。解法就是有点类似于归并排序的思路,就是分治法,不了解归并排序的朋友,请参见归并排序-维基百科,是一个比较经典的O(nlogn)的排序算法,还是比较重要的。
思路是先分成两个子任务,然后递归求子任务,最后回溯回来。这个题目也是这样,先把k个list分成两半,然后继续划分,知道剩下两个list就合并起来,合并时需要用到两个有序的链表子过程。不熟悉的朋友可以复习一下。代码如下:
class Solution { public static ListNode mergeKLists(ListNode[] lists) { if(lists.length == 0) return null; return help(lists, 0, lists.length - 1); } public static ListNode help(ListNode[] lists, int l, int r) { int m = (l + r) / 2; if(l < r){ return mergeTwoLists(help(lists, l, m), help(lists, m + 1, r)); } return lists[l]; } public static ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1 == null || l2 == null) return l1==null? l2:l1; ListNode dummy = new ListNode(0); if(l1.val < l2.val){ dummy.next = l1; l1 = l1.next; }else{ dummy.next = l2; l2 = l2.next; } ListNode temp = dummy.next; while(l1 != null && l2 != null){ if(l1.val < l2.val){ temp.next = l1; temp = temp.next; l1 = l1.next; }else{ temp.next = l2; temp = temp.next; l2 = l2.next; } } temp.next = l1 == null ? l2:l1; return dummy.next; } public static void print(ListNode head){ while(head != null){ System.out.println(head.val); head = head.next; } } public static void main(String[] args) { ListNode l1 = new ListNode(4); ListNode l2 = new ListNode(5); ListNode l3 = new ListNode(6); ListNode l4 = new ListNode(1); ListNode l5 = new ListNode(2); ListNode l6 = new ListNode(3); l1.next = l2; l2.next = l3; l4.next = l5; l5.next = l6; ListNode[] lists = {l1,l4}; print(mergeKLists(lists)); }}
阅读全文
0 0
- Leetcode题解-23. Merge k Sorted Lists
- leetcode题解-23. Merge k Sorted Lists
- LeetCode题解:Merge k Sorted Lists
- leetcode题解c++ | 23. Merge k Sorted Lists
- leetcode 23. LeetCode Merge k Sorted Lists
- [LeetCode]23.Merge k Sorted Lists
- LeetCode --- 23. Merge k Sorted Lists
- LeetCode 23.Merge k Sorted Lists
- [Leetcode] 23. Merge k Sorted Lists
- 【LeetCode】23.Merge k Sorted Lists
- [leetcode] 23.Merge k Sorted Lists
- Leetcode-23.Merge k Sorted Lists
- [Leetcode]23. Merge k Sorted Lists @python
- leetcode 23. Merge k Sorted Lists
- leetcode 23. Merge k Sorted Lists
- leetcode 23. Merge k Sorted Lists
- LeetCode 23. Merge k Sorted Lists
- [leetcode] 23. Merge k Sorted Lists
- libevent源码深度剖析
- [情商(1-4.实践版)(套装共5册)].(美)丹尼尔•戈尔曼.扫描版.pdf 免费下载
- leetCode#617. Merge Two Binary Trees
- Codeforces Round #451 (Div. 2)
- 算法与数据结构——算法题 147:字符串非空子串(腾讯笔试题) ? 待解决
- leetcode题解-23. Merge k Sorted Lists
- libevent源码深度剖析八
- Asynchronous_programming_in_Java8.pdf 英文原版 免费下载
- 二维码生成原理及解析代码
- Mohican_12/12 C语言—循环 for ,while,do while
- 十四、正则
- codeforces 144A Arrival of the General
- python 提取一行中任意路径
- leetcode—Reverse Integer