23. Merge K Sorted Lists (Java, 归并排序的思路)
2024-10-19 06:26:56
题目:Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
解析:合并k个已经有序的单链表,使其最终成为一个有序的单链表。原理就是归并排序,递归运算。基本算法recusion 与 merge
编码:
public ListNode mergeKLists(ListNode[] lists) {
if(lists == null || lists.length == 0)
return null;
if(lists.length == 1)
return lists[0];
return recursion(lists,0,lists.length - 1);
}
//recursion
public ListNode recursion(ListNode[] lists,int start,int end){
if(start == end)//只有一个链表
return lists[start];
if(start < end){
int mid = start + (end - start) / 2; //注意:这里防止整数越界的处理,start+(end-start)/2
ListNode l1 = recursion(lists,start,mid);
ListNode l2 = recursion(lists,mid + 1,end);
return merge(l1,l2);
} else
return null; }
//merge
public ListNode merge(ListNode l1,ListNode l2){
ListNode head = new ListNode(0); //创建一个头结点,最后还要删掉
ListNode p = head;
while(l1 != null && l2 != null){
if(l1.val <= l2.val){
p.next = l1;
l1 = l1.next;
} else{
p.next = l2;
l2 = l2.next;
}
p = p.next;
} p.next = (l1 != null) ? l1 : l2;
return head.next;// head的下一个节点是第一个数据结点
}
最新文章
- 【leetcode】Remove Nth Node From End of List
- 搜索表头的例子-jqueryEasyUi
- RDIFramework.NET ━ 9.9 角色权限管理 ━ Web部分
- Opencv Cookbook阅读笔记(四):用直方图统计像素
- VMware的四种网络连接方式
- iOS 用protocol 和 用继承小体会
- CA*Layer(CAShapeLayer--CATextLayer)
- nginx 多域名配置 (nginx如何绑定多个域名)
- u-boot Makefile整体解析
- PAT1003
- ECSHOP info: Can&#39;t Connect MySQL Server(localhost:3306)!
- python机器学习实战(一)
- C++迭代器的使用和操作总结
- Fragment详解-android学习之旅(四十八)
- 【爬虫】Xpath高级用法
- 常见mysql的慢查询优化方式
- 【Selenium】【BugList8】126邮箱定位不到“退出”按钮:Message: TypeError: can&#39;t access dead object
- SQLServer 的case when语句使用实现统计
- Jackson(使用注解)
- Codeforces Round #341 (Div. 2) E. Wet Shark and Blocks dp+矩阵加速