Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
awesome-algorithm
提交
17d7b0b2
A
awesome-algorithm
项目概览
OpenDocCN
/
awesome-algorithm
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
awesome-algorithm
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
17d7b0b2
编写于
3月 20, 2019
作者:
K
Keqi Huang
提交者:
GitHub
3月 20, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #254 from jsycdut/master
提供leetcode 23题-合并K个有序链表的O(NlogK) Java解法
上级
73e76420
3250987c
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
76 addition
and
0 deletion
+76
-0
docs/Leetcode_Solutions/Java/0023._Merge_K_Sorted_Lists.md
docs/Leetcode_Solutions/Java/0023._Merge_K_Sorted_Lists.md
+76
-0
未找到文件。
docs/Leetcode_Solutions/Java/0023._Merge_K_Sorted_Lists.md
0 → 100644
浏览文件 @
17d7b0b2
# 23. Merge K Sorted Lists
*<font color=red>难度: Hard</font>*
## 刷题内容
> 原题链接
https://leetcode.com/problems/merge-k-sorted-lists/description/
> 内容描述
[23] Merge k Sorted Lists
https://leetcode.com/problems/merge-k-sorted-lists/description/
*
algorithms
*
Hard (33.28%)
*
Total Accepted: 352.8K
*
Testcase Example: '[[1,4,5],[1,3,4],[2,6]]'
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Example:
Input:
[
1->4->5,
1->3->4,
2->6
]
## 解题方案
> 思路 1
****
*- 时间复杂度:O(NlogK) *
****
- 空间复杂度:O(N)
****
*
K为链表的数量,N为所有链表的节点的总个数
此题在于一分一合,将K个有序链表通过二分,拆成两两一组的链表,就变成了leetcode 21题中的合并两个有序链表了,随后将所有链表逐层合并,就像从二叉树的叶子节点开始,不断向上合并,此题就求解完毕了。
此题需要用到的技巧就是二分,以及递归合并两个有序链表(当然迭代合并两个有序列表也是可以的)
Beats 100%
```
java
public
ListNode
mergeKLists
(
ListNode
[]
lists
)
{
if
(
lists
==
null
||
lists
.
length
==
0
)
return
null
;
return
sort
(
lists
,
0
,
lists
.
length
-
1
);
}
// 二分K个链表
ListNode
sort
(
ListNode
[]
lists
,
int
lo
,
int
hi
)
{
if
(
lo
>=
hi
)
return
lists
[
lo
];
int
mid
=
(
hi
-
lo
)
/
2
+
lo
;
ListNode
l1
=
sort
(
lists
,
lo
,
mid
);
ListNode
l2
=
sort
(
lists
,
mid
+
1
,
hi
);
return
merge
(
l1
,
l2
);
}
// 合并两个有序链表的递归写法
ListNode
merge
(
ListNode
l1
,
ListNode
l2
)
{
if
(
l1
==
null
)
return
l2
;
if
(
l2
==
null
)
return
l1
;
if
(
l1
.
val
<
l2
.
val
)
{
l1
.
next
=
merge
(
l1
.
next
,
l2
);
return
l1
;
}
l2
.
next
=
merge
(
l2
.
next
,
l1
);
return
l2
;
}
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录