博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Merge k Sorted Lists@LeetCode
阅读量:7222 次
发布时间:2019-06-29

本文共 1327 字,大约阅读时间需要 4 分钟。

当初看到这题的第一反应是每次都遍历一遍所有头节点,然后选出最小的连接到已排序链表的末尾。这个想法当然能够解决问题,但是性能上肯定是过不去的。因为这样相当于没排序一个元素就是需要比较m次(m为链表条数),那么最后的复杂度就是O(nm)n为元素总数)。

那么更加高效的办法就是对链表进行两两合并,两条链表的合并复杂度为O(l + k)lk分别代表了两条链表的元素个数,那么最终的复杂度为O(n)n为元素总数)。

实现代码:

javapublic class Solution {    public ListNode mergeKLists(List
lists) { if (lists.isEmpty()) return null; return merge(lists, 0, lists.size() - 1); } public ListNode merge(List
lists, int start, int end) { if (start == end) return lists.get(start); int mid = (start + end) / 2; ListNode one = merge(lists, start, mid); ListNode two = merge(lists, mid + 1, end); return mergeTwoLists(one, two); } public ListNode mergeTwoLists(ListNode node1, ListNode node2) { ListNode head = new ListNode(-1), node = head; while (node1 != null && node2 != null) { if (node1.val < node2.val) { node.next = node1; node1 = node1.next; } else { node.next = node2; node2 = node2.next; } node = node.next; } if (node1 == null && node2 != null) { node.next = node2; } else if (node1 != null && node2 == null) { node.next = node1; } return head.next; }}

转载地址:http://imhym.baihongyu.com/

你可能感兴趣的文章
android JNI的.so库调用
查看>>
MVVM(Knockout.js)的新尝试:多个Page,一个ViewModel
查看>>
Kotlin从入门到放弃(03day)
查看>>
2019年的Android开发,我的求变之路
查看>>
深度理解递归+递归经典问题实战
查看>>
linux命令 vim
查看>>
http://natesbox.com/blog/vmware-esx-monitoring-with-cacti/
查看>>
hhh
查看>>
awastas 日志分析工具搭建文档
查看>>
PL/SQL Developer 远程连接Oracle数据库
查看>>
andriod错误
查看>>
[学习笔记]mysql主从配置
查看>>
NFS 排错
查看>>
我的友情链接
查看>>
Myeclipse中使用正则表达式查找替换
查看>>
新手学习数据结构与算法---快速排序算法
查看>>
iptables本地远程桌面转发
查看>>
spring mvc 3 注解任务
查看>>
我的友情链接
查看>>
合作现裂痕 苹果iPhone下半年或被联通“冷处理”
查看>>