LeetCode——Merge k Sorted Lists
Discription:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Subscribe to see which companies asked this question.
思路:其实就是归并排序的最后一步归并操作。思想是递归分治,先把一个大问题分成2个子问题,然后对2个子问题的解进行合并。经过一次遍历就能找出已经有序的序列。就算是题目中给出的条件,已经有K个已经排好序的链表。然后递归的把问题分成2个,4个。。。。logK个子序列。然后每两个子序列的解进行合并。最后得到一个排好序的链表。时间复杂度为O(nlogK)。
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution { public ListNode merge2Lists(ListNode list1, ListNode list2) { ListNode head = new ListNode(0);
ListNode cur = head; while(list1 != null && list2 != null) {
if(list1.val < list2.val) {
cur.next = list1;
list1 = list1.next;
}
else {
cur.next = list2;
list2 = list2.next;
}
cur = cur.next;
} while(list1 != null) {
cur.next = list1;
list1 = list1.next;
cur = cur.next;
} while(list2 != null) {
cur.next = list2;
list2 = list2.next;
cur = cur.next;
} return head.next;
} public ListNode mergeKLists(ListNode[] lists) { if(lists == null || lists.length == 0) {
return null;
} if(lists.length == 1) {
return lists[0];
} int mid = lists.length / 2; ListNode list1 = mergeKLists(Arrays.copyOfRange(lists, 0, mid));
ListNode list2 = mergeKLists(Arrays.copyOfRange(lists, mid, lists.length)); return merge2Lists(list1, list2);
}
}
为何这道题Java的效率这么高,把C/C++都完爆了。

LeetCode——Merge k Sorted Lists的更多相关文章
- LeetCode: Merge k Sorted Lists 解题报告
Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...
- [LeetCode] Merge k Sorted Lists 合并k个有序链表
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 这 ...
- LeetCode:Merge k Sorted Lists
题目链接 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexi ...
- leetcode -- Merge k Sorted Lists add code
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. [ ...
- LeetCode Merge k Sorted Lists (链表)
题意 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...
- [Leetcode] Merge k sorted lists 合并k个已排序的链表
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 思 ...
- Leetcode:Merge k Sorted Lists分析和实现
题目大意是传入一个链表数组lists,每个链表都由若干个链接的链表结点组成,并且每个链表结点记录一个整数.题目保证传入的链表中的整数按从小到大进行排序. 题目要求我们输出一个新的链表,这个链表中应该包 ...
- LeetCode Merge k Sorted Lists 解决报告
https://oj.leetcode.com/problems/merge-k-sorted-lists/ 归并K已经整理阵列,和分析算法的复杂. 解决报告:无论是不考虑优化,最简单的实现是要重新走 ...
- LeetCode —— Merge k Sorted Lists
/* ** 算法的思路: ** 1.将k个链表的首元素进行建堆 ** 2.从堆中取出最小的元素,放到链表中 ** 3.如果取出元素的有后续的元素,则放入堆中,若没有则转步骤2,直到堆为空 */ #in ...
随机推荐
- MyBatis 查询
User.java package com.mycom.mybatis_1.bean; import java.io.Serializable; public class User implement ...
- 使用VSTS/TFS搭建iOS持续集成环境
TFS 自2015版开始支持跨平台的持续集成环境,通过提供开源的build agent为 Windows / linux / macOS 提供了统一的持续集成环境管理能力.这篇文章给大家介绍一下如何使 ...
- 使用RAML描述API文档信息的一些用法整理
RAML是Restful API Modeling Language的缩写,是用来描述API信息的文档. 创建一个.raml后缀的文件,用Atom打开. 基本用法 #%RAML 0.8 title: ...
- Android GPS 临近触发
前面介绍过LocationManager有一个addProximityAlert(double latitude,double longitude,float radius,long expirati ...
- 4kbps~15kbps语音编码器基础框架ACELP
- Github上的andoird开源组件整理
http://blog.csdn.net/findsafety/article/details/50623627 第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListVie ...
- struts2:数据校验,通过Action中的validate()方法实现校验(续:多业务方法时的不同验证处理)
前文:struts2:数据校验,通过Action中的validate()方法实现校验,图解 如果定义的Action中存在多个逻辑处理方法,且不同的处理逻辑可能需要不同的校验规则,在这种情况下,就需要通 ...
- Mac系统下,在android studio中使用Github版本管理
1.下载并安装github客户端http://git-scm.com/download/ 2.打开android studio,测试github是否使用ok 点击"test",如果 ...
- StringEx
static class StringEx { public static string MD5(this String str) { byte[] bytes = new MD5CryptoServ ...
- linux ss 网络状态工具
ss是Socket Statistics的缩写 查看网络状态,经常用的命令: watch ss -lnt ss命令用于显示socket状态. 他可以显示PACKET sockets, TCP soc ...