题目

合并 k 个排序链表,返回合并后的排序链表

示例:

    输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6
复制代码

思考

之前做过合并两个有序链表,这道题增加难度,合并k个有序链表,基本上也是两两合并。 采用分治法,简单来说就是不停的对半划分,比如k个链表先划分为合并两个k/2个链表的任务,再不停的往下划分,直到划分成只有一个或两个链表的任务,开始合并。

代码中的k是通过 (len+1)/2 计算的,这里为啥要加1呢,这是为了当len为奇数的时候,k能始终从后半段开始,比如当len=5时,那么此时k=3,则0和3合并,1和4合并,最中间的2空出来。当len是偶数的时候,加1也不会有影响,比如当len=4时,此时k=2,那么0和2合并,1和3合并

解决方法

/** @lc app=leetcode.cn id=23 lang=javascript** [23] 合并K个排序链表*/
/*** Definition for singly-linked list.* function ListNode(val) {*     this.val = val;*     this.next = null;* }*/
/*** @param {ListNode[]} lists* @return {ListNode}*/
var mergeKLists = function(lists) {let len=lists.length;if(len===0){return null}if(len===1){return lists[0]}while(len>1){let k=parseInt((len+1)/2)for(let i=0;i<parseInt(len/2);i++){lists[i]=mergeTwoLists(lists[i],lists[i+k])}len=k;}return lists[0]
};
/**
* 合并两个有序链表
*/
var mergeTwoLists = function(l1, l2) {if(l1===null){return l2;}else if(l2===null){return l1;}if(l1.val<l2.val){l1.next=mergeTwoLists(l1.next,l2)return l1}else{l2.next=mergeTwoLists(l1,l2.next)return l2}
};
复制代码

说明

  • 题目地址:合并K个排序链表
  • 封面大图来自必应壁纸,侵权删

[leetcode-JavaScript]---23、合并K个排序链表相关推荐

  1. LeetCode题解-23 合并K个排序链表 Hard

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [1->4->5,1->3->4,2->6 ] 输出: 1->1->2 ...

  2. leetcode C++ 23. 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

    一.思路: 第一种:求出每一个链表的最小值,然后把这个节点放到合并的结果链表里面,这个链表指向next 第二种:优先级队列,头结点放到优先级队列里面,将top的那一个放到合并的链表里面,再讲top指向 ...

  3. 【LeetCode刷题】23. 合并K个排序链表

    23. 合并K个排序链表 题目 思路1 - 普通思路 思路2 - 逐一比较 思路3 – 逐一两两合并 思路4 – 优先级队列(小顶堆) 思路5 – 分治策略 题目 链接:23. 合并K个排序链表 合并 ...

  4. LeetCode 23. 合并K个排序链表(优先队列)

    文章目录 1. 题目信息 2. 思路 3. 代码 1. 题目信息 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例:输入: [1->4->5,1->3-& ...

  5. leetcode 23. 合并K个排序链表

    题目 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [   1->4->5,   1->3->4,   2->6 ] 输出: 1 ...

  6. 刻意练习:LeetCode实战 -- Task12. 合并K个排序链表

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  7. LeetCode实战:合并K个排序链表

    题目英文 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexi ...

  8. 23. 合并K个排序链表

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [   1->4->5,   1->3->4,   2->6 ] 输出: 1-&g ...

  9. [剑指offer][JAVA]面试题[第23题][合并K个排序链表][分治][优先队列]

    [问题描述]23.合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [1->4->5,1->3->4,2->6 ] ...

最新文章

  1. 《高性能MySQL》の复制
  2. Three.js学习笔记 – “我和小伙伴都惊呆了”的特效和Three.js初探
  3. Android子线程中更新UI的4种方法
  4. 中国计算机学会CCF推荐国际学术会议和期刊目录-计算机体系结构/并行与分布计算/存储系统
  5. SAP gateway处理multiple key的逻辑
  6. MATLAB判断文件是否存在、删除文件
  7. JS 判断输入是否为数字
  8. matplotlib-快速学习折线图-柱状图2个-饼图-0225
  9. Unix/Linux 目录结构的来历
  10. cookie 和 session 区别
  11. 在CentOS 7上利用systemctl添加自定义系统服务 /usr/lib/systemd/
  12. Project Euler Problem 27小结
  13. 斐波那契数列的数学分析
  14. [转]mysql_connect() 不支持 请检查 mysql 模块是否正确加载 解决
  15. Python制作PPT周报
  16. 如何根据芯片手册时序图编写驱动程序
  17. 英语后置定语语法归纳
  18. 计算机每次启动都要系统修复,win7电脑每次开机都要重启路由器才能上网的修复方法...
  19. 一些花里胡哨——底盘旋转、闪烁星星
  20. java小游戏之捕鱼达人,学了java,妈妈不再担心我去网吧游戏厅了!

热门文章

  1. 世界机器人大会|人工智能VS人类
  2. 防止被算力“锁死”,人工智能进化急需革命性算法
  3. Science重磅!人类特有基因触发猴子长出更强大的大脑
  4. 罗敏敏组建立新型脑-脑接口实现“阿凡达”式的跨鼠遥控
  5. 欧洲两个研究团队开发出了让截肢者能感觉到并准确抓住物体的仿生手
  6. 神经网络并不是尚方宝剑,我们需要正视深度 NLP 模型的泛化问题
  7. 马云:新一轮技术革命来袭,未来90%的制造业会在互联网上
  8. 2018年人工智能全景图与发展趋势分析
  9. 如果编程语言是飞机 | 每日趣闻
  10. 互联网人的求生战役!分享身边的 5 个故事