leetcode刷题笔记二十三 合并K个排序链表 Scala版本
时间:2020-04-22
本文章向大家介绍leetcode刷题笔记二十三 合并K个排序链表 Scala版本,主要包括leetcode刷题笔记二十三 合并K个排序链表 Scala版本使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
leetcode刷题笔记二十三 合并K个排序链表 Scala版本
源地址:23. 合并K个排序链表
问题描述:
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
]
Output: 1->1->2->3->4->4->5->6
代码补充:
//一般来说,最直接的方法是将所有链表进行合并,然后进行排序,显然这种
//做法效率低下且繁杂,采用优先队列的方法处理效率较高。
object Solution {
//引入scala的优先队列结构
import scala.collection.mutable.PriorityQueue
def mergeKLists(lists: Array[ListNode]): ListNode = {
//构建优先队列,ListNode类型的空优先队列
//根据节点的x值从小向大排列
val pq = PriorityQueue.empty[ListNode](Ordering.by(n => n.x)).reverse
//设置双头指针,便于返回
var head = new ListNode(0)
var nhead = head
//将Lists中各个链表加入优先队列
for (elem <- lists if (elem != null)) {println(elem);pq.enqueue(elem)}
//由于队列内有序,当PQ不为空时,弹出最小值链表头节点,如果其后还有结点,移动至后一个节点,再将队列入队,反复弹出当前队列中的最小的点,直到队列为空
while(pq.isEmpty != true){
var dnode = pq.dequeue()
head.next = new ListNode(dnode.x)
if(dnode.next != null) pq.enqueue(dnode.next)
head = head.next
}
nhead.next
}
}
原文地址:https://www.cnblogs.com/ganshuoos/p/12753712.html
- POJ 1017 Packets
- Hadoop离线数据分析平台实战——380MapReduce程序优化Hadoop离线数据分析平台实战——380MapReduce程序优化
- 配置远程访问Jupyter+腾讯云超划算活动上车
- HDU 4256 The Famous Clock
- ZOJ 1403&&HDU 1015 Safecracker【暴力】
- Torch7搭建卷积神经网络详细教程
- 爬虫入门到精通-HTTP协议的讲解
- 批量替换文件名和文本文件内容mac
- 抓取手机app的数据(摩拜单车)
- Hadoop离线数据分析平台实战——520项目总结Hadoop离线数据分析平台实战——520项目总结
- 爬虫入门到精通-mongodb的基本使用
- 拒绝撕逼,用数据来告诉你选择器到底哪家强
- 爬虫入门到精通-headers的详细讲解(If-modified-since)
- Linux配置网卡
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter基础widgets教程-BottomNavigationBar篇
- 直播系统介绍
- Azure内容审查器之羞羞图审查
- Clickhouse简介和性能对比
- Clickhouse创建分布式表以及表引擎介绍
- Azure 内容审查器之文本审查
- Redis中String数据类型原理实现
- Clickhouse分布式集群搭建
- Redis过期策略以及淘汰机制
- 几行代码就可以轻松给你的程序加上进度条
- git禁止在master分支push和commit
- 记录一次mybatis缓存和事务传播行为导致ut挂的排查过程
- appium教程_3.启动appium-server
- appium教程_4.adb常用命令
- Python中的高阶概念属性:五个你应该搞明白的知识点