合并K个排序链表
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6 解法一:
暴力法:逐一合并,直到数组结尾
public ListNode mergeKLists(ListNode[] lists) {
int len = lists.length;
if(len == 0) return null;
int len = lists.length;
if(len == 0) return null;
ListNode dummy = new ListNode(-1);
dummy.next = lists[0];
int i = 1;
while(i<len){
dummy.next = merge(dummy.next,lists[i]);
i = i + 1;
}
return dummy.next;
}
//合并两个链表
public static ListNode merge(ListNode l1, ListNode l2) {
ListNode dummyHead = new ListNode(0);
ListNode node = dummyHead;
while(l1!=null && l2!=null){
if(l1.val>=l2.val){
node.next = l2;
l2 = l2.next;
}else{
node.next = l1;
l1 = l1.next;
}
node = node.next;
}
if(l1==null){
node.next = l2;
}
if(l2==null){
node.next = l1;
}
return dummyHead.next;
}
解法二:
归并思想;
public ListNode mergeKLists(ListNode[] lists) {
int len = lists.length;
if(len == 0) return null;
return divide(lists,0,lists.length-1);
}
public static ListNode divide(ListNode[] lists,int l,int r){
if(r == l){
return lists[l];
}
int mid = (r - l) / 2 + l;
ListNode l1 = divide(lists,l,mid);
ListNode l2 = divide(lists,mid+1,r);
return merge(l1,l2);
}
//合并两个链表
public static ListNode merge(ListNode l1, ListNode l2) {
ListNode dummyHead = new ListNode(0);
ListNode node = dummyHead;
while(l1!=null && l2!=null){
if(l1.val>=l2.val){
node.next = l2;
l2 = l2.next;
}else{
node.next = l1;
l1 = l1.next;
}
node = node.next;
}
if(l1==null){
node.next = l2;
}
if(l2==null){
node.next = l1;
}
return dummyHead.next;
}
//合并两个链表 public static ListNode merge(ListNode l1, ListNode l2) { ListNode dummyHead = new ListNode(0); ListNode node = dummyHead; while(l1!=null && l2!=null){ if(l1.val>=l2.val){ node.next = l2; l2 = l2.next; }else{ node.next = l1; l1 = l1.next; } node = node.next; }
if(l1==null){ node.next = l2; } if(l2==null){ node.next = l1; } return dummyHead.next; }
合并K个排序链表的更多相关文章
- [LeetCode] 23. 合并K个排序链表
题目链接: https://leetcode-cn.com/problems/merge-k-sorted-lists/ 题目描述: 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂 ...
- [Swift]LeetCode23. 合并K个排序链表 | Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ...
- 合并K个排序链表(java实现)
题目: 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: ...
- 0008 合并K个排序链表
合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1-&g ...
- LeetCode(23):合并K个排序链表
Hard! 题目描述: 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2-> ...
- LeetCode题解-23 合并K个排序链表 Hard
合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1->1-&g ...
- Leetcode题库——23.合并k个排序链表
@author: ZZQ @software: PyCharm @file: mergeKLists.py @time: 2018/10/12 19:55 说明:合并 k 个排序链表,返回合并后的排序 ...
- leetcode 23. 合并K个排序链表 JAVA
题目: 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: ...
- 代码题(14)— 合并有序链表、数组、合并K个排序链表
1.21. 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出 ...
随机推荐
- spring boot简单的小demo(适合于初学者)
import com.example.demo2.com.example.dao.ShopDao; import com.example.demo2.com.example.entity.Shops; ...
- Python【第三篇】文件操作、字符编码
一.文件操作 文件操作分为三个步骤:文件打开.操作文件.关闭文件,但是,我们可以用with来管理文件操作,这样就不需要手动来关闭文件. 实现原理: import contextlib @context ...
- Java多线程编程-线程之间的通信
转载自:这里 学习了基础的线程知识 看到了 线程之间的通信 线程之间有哪些通信方式呢? 1.同步 这里讲的同步是指多个线程通过synchronized关键字这种方式来实现线程间的通信. public ...
- Zsh安装及常用操作
Zsh因为插件丰富而闻名,但是 zsh 的默认配置及其复杂繁琐,让人望而却步,直到有了oh-my-zsh这个开源项目,让zsh配置降到0门槛.而且它完全兼容 bash. 安装Zsh: [root@lo ...
- SQL server 统计数据库表数量和列出所有表名称
统计表数量 SELECT count(*) FROM sys.objects WHERE type='U' 列出表名称 SELECT NAME FROM sys.objects WHERE typ ...
- 版本控制工具之git
git存储区域详解 命令快速总结 初始化 git init 当前文件夹初始化 代码提交 git add file/. 自动检测工作区修改的内容提交到暂存区 git status 查看当前文件夹工作区的 ...
- 微服务之服务中心—zookeeper
微服务中的服务注册与发现 传统的项目中,某个服务访问另一个服务,可以通过在配置文件中记录其他服务静态地址的形式进行访问,通常这个配置文件也很少更新,模式如下图: 而在微服务中,每个功能可能都是一个独立 ...
- Mathematica 求出解后代入变量
Solve[2 x - 3 == 0, x] x = x //. %[[1]]
- [Everyday Mathematics]20150305
设 $f\in C^2[0,1]$, $$\bex f(0)=-1,\quad f'(1)=3,\quad \int_0^1 xf''(x)\rd x=1. \eex$$ 试求 $f(1)$. 解答: ...
- maven私库nexus2.11.4迁移升级到nexus3.12.0
nexus简介 nexus是一个强大的maven仓库管理器,它极大的简化了本地内部仓库的维护和外部仓库的访问. nexus是一套开箱即用的系统不需要数据库,它使用文件系统加Lucene来组织数据 .n ...