23. Merge k Sorted Lists

输入:k个有序链表lists
输出:一个有序链表
规则:将这个k个有序链表合并成一个有序链表
分析:在链表中合并两个有序链表为一个有序链表是基本功。最开始的直觉是我们可以将lists[0]和lists[1]合并得到 result,result再和lists[2]合并,一直 到最后合并完成。这个每个节点 都要和其他链表中的一个节点比较,所以时间复杂度是O(k*n)。n是所有节点的个数总和。

	public ListNode mergeKLists(ListNode[] lists) {ListNode mergeHead = new ListNode(0);ListNode node = mergeHead;while(true){ListNode minHead = null;int idx = -1;for (int i=0;i<lists.length;i++) {if (lists[i] != null) {if(minHead == null || minHead.val> lists[i].val){minHead = lists[i];idx = i;}}}if(minHead==null){break;}lists[idx] = lists[idx].next;node.next = new ListNode(minHead.val);node = node.next;}return mergeHead.next;}

分析2:可以使用堆排序解决上面的比较问题。在堆中维护的是每个链表 表头元素。移除最小的节点,插入链表中的下一个节点。时间复杂度O(nlogk)。

	public ListNode mergeKLists(ListNode[] lists) {ListNode dummy =  new ListNode(-1);ListNode current = dummy;PriorityQueue<ListNode> heap = new PriorityQueue<ListNode>(new Comparator<ListNode>(){public int compare(ListNode i1,ListNode i2){return i1.val-i2.val;}});//把头节点放进去for(ListNode node: lists){if(node!=null){heap.offer(node);}           }while(!heap.isEmpty()){ListNode node = heap.poll();if(node.next != null){heap.offer(node.next);} current.next = node;current = current.next;}return dummy.next;}

分析3:使用分治法。先解决lists[0]和lists[1],lists[2]和lists[3]…,合并完成只剩下k2\dfrac{k}{2}2k。下一轮解决lists[0]和lists[2],lists[4]和lists[6]…,合并完成剩下k4\dfrac{k}{4}4k…一直到最后只剩下lists[0],就是结果。

	public ListNode mergeKLists(ListNode[] lists) {for(int interval =1 ;interval<lists.length; interval=interval*2){for(int j = 0;j+interval<lists.length;j = j + 2*interval){lists[j] = mergeTwoLists(lists[j],lists[j+interval]);}}return lists.length>0?lists[0]:null;}public ListNode mergeTwoLists(ListNode l1, ListNode l2) {ListNode dummy = new ListNode(-1);ListNode currentNode = dummy;while(l1!=null  && l2!=null){if(l1.val > l2.val){currentNode.next = l2;l2 = l2.next;}else{currentNode.next = l1;l1 = l1.next;}currentNode = currentNode.next;}while(l1!=null){currentNode.next = l1;l1 = l1.next;currentNode = currentNode.next;}while(l2!=null){currentNode.next = l2;l2 = l2.next;currentNode = currentNode.next;}return dummy.next;}

复杂度分析。最外层循环有log2klog_2^klog2k次。mergeTwoLists函数的时间复杂度是n=两个列表节点个数的和。最后合起来是O(nlogk)。这里的n是所有链表节点个数和。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring学习(40):注入数组类型

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

PS教程:如何拼图调色出高大上的作品

Hello&#xff0c;小伙伴们&#xff0c;是不是每每看到一些创意海报&#xff0c;就苦于自己不会做&#xff0c;其实合成并不难&#xff0c;掌握原理与技法&#xff0c;接下来就是拼图调色啦&#xff01;首先我们先来看下最终的效果图&#xff0c;铛铛铛&#xff01; 下面我们就…

32. Longest Valid Parentheses

输入&#xff1a;一个字符串s&#xff0c;只包含字符(和) 输出&#xff1a;一个整数&#xff0c;表示最长括号匹配子串的长度。 规则&#xff1a;括号匹配的字符是指每有一个‘(’字符就有对应的‘)’。 其他 情况都是无效的。 暴力算法分析&#xff1a;取字符串s的每一个子串&…

spring学习(41):属性注入

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

【JS】实时监控页面,input框数值自动求和

需求&#xff1a; 有一个页面需要将input框填入的各个费用自动相加&#xff0c;添加到“合计费用”里。 解决方案&#xff1a; 使用jquery的blur实践&#xff0c;每个费用的Input框检测到失去焦点时&#xff0c;将所有的input框数值相加求和&#xff0c;然后写入到“合计费用”…

spring学习(30):定义第一个bean

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

通过字符串引入模块下的属性

flask中可以配置一个字符串导入settings下的配置文件 app.config.from_object("settings.ProductionConfig")这里就是来讲解一下这个到底是怎么实现的。 例&#xff1a; 这是just_xxx.py里面的内容 # -*- coding: utf-8 -*- # Time : 2019/6/17 上午 11:50 # Auth…

392. Is Subsequence

写得好的解题思路链接&#xff1a;url1 url2(动态规划写的比较好) 输入&#xff1a;两个字符串s和t&#xff0c;t可能会很长 输出&#xff1a;s是否是t的子序列。 规则&#xff1a;字符串子序列的定义是&#xff1a;通过删除字符串t的部分字符但是不能改变字符相对位置&#x…

spring学习(42):属性注入注入数组和列表的说明

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

spring学习(43):属性注入中注入引用对象

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

Dijkstrala算法

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 Dijkstrala算法查找图中从一个节点到另一个节点的最短路径&#xff0c;输出结果是最短路径以及长度。算法执行的前提条件是权重不能是负数。 起始顶点记为sid&#…

链表题目汇总(python3)

1、从头到尾打印链表 输入一个链表&#xff0c;按链表值从尾到头的顺序返回一个ArrayList。 # -*- coding:utf-8 -*- class ListNode:def __init__(self, x):self.val xself.next Noneclass Solution:def printListFromTailToHead(self, listNode):l []while listNode:l.appe…

spring学习(44):p名称空间注入

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

A*算法

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 Dijkstra不能解决的问题 在Dijkstra类似BFS&#xff0c;从起始节点找到距离最短的节点&#xff0c;一层一层向外扩展&#xff0c;直到找到目标节点。 在有些时候这种…

导入安全证书到jdk

一&#xff1a;.导入证书 1.打开doc窗口&#xff0c;打开cmd&#xff0c;执行命令&#xff1a; keytool -import -file f:\ca.crt -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -alias server-file 指定证书文件的位置 -alias 指定证书的别名 2.输入密钥库口令…

spring学习(45):util名称空间注入

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

拓扑排序两种实现方式

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 拓扑排序能解决的问题 在一个项目中会有很多源代码文件。编译器在编译代码的时候需要按照依赖关系&#xff0c;依次编译每个源文件。例如A.java依赖B.java&#xff…

Jmeter_http request的简单设置和应用

http request 协议、地址、端口号 参数类型 正则搜索 帮助文档 相等的关系 匹配正则的结果&#xff08;jmeter一般都用分组取想用的数据&#xff09; 转载于:https://www.cnblogs.com/rychh/articles/11087537.html

spring学习(46):spring的单例bean

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

943. Find the Shortest Superstring

目录题目描述暴力搜索分析暴力搜索优化动态规划参考链接题目描述 输入&#xff1a;字符串数组String[] A 输出&#xff1a;一个字符串result&#xff0c;A中每一个字符串是result的子串&#xff0c;并且reuslt是符合这个条件的最短的字符串。 举例&#xff1a; 输入: [“alex”…