描述

合并 k 个升序的链表并将结果作为一个升序的链表返回其头节点。

数据范围:节点总数 0 \le n \le 50000≤n≤5000,每个节点的val满足 |val| <= 1000∣val∣<=1000

要求:时间复杂度 O(nlogn)O(nlogn)

示例1

输入:

[{1,2,3},{4,5,6,7}]

返回值:

{1,2,3,4,5,6,7}

示例2

输入:

[{1,2},{1,4,5},{6}]

返回值:

{1,1,2,4,5,6}

解题报告:

区分于归并排序。归并排序是说,给定一个无序数组给排序成有序数组。

这个是说,给定K个有序链表,要求合并成一个有序链表

当然,本质的merge(h1, h2)函数没变,都是把两个有序序列给合并成一个有序序列。

这题还有一种做法,不过空间复杂度较高一些,时间复杂度是一样的,就是用优先队列来存K个链表的头结点,然后排序这样子。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *mergeKLists(vector<ListNode *> &lists) {return mergeList(lists, 0, lists.size()-1);}ListNode* mergeList(vector<ListNode *> lists, int l, int r) {if(l == r) {return lists[l];}if(l > r) {return nullptr;}int mid = (l+r)/2;return mer(mergeList(lists, l, mid), mergeList(lists, mid+1, r));}ListNode* mer(ListNode* h1, ListNode* h2) {ListNode* head = new ListNode(-1);ListNode* p = head;while(h1 && h2) {if(h1->val < h2->val) {p->next = h1;h1 = h1->next;p = p->next;} else {p->next = h2;h2 = h2->next;p = p->next;}}if(h1) p->next = h1;else p->next = h2;return head->next;}
};

【NC51 合并k个已排序的链表】K路归并相关推荐

  1. 常考数据结构与算法:合并k个已排序的链表

    题目描述 合并\ k k 个已排序的链表并将其作为一个已排序的链表返回.分析并描述其复杂度. 示例1 输入 [{1,2,3},{4,5,6,7}] 返回值 {1,2,3,4,5,6,7} import ...

  2. C语言从已排序的链表中删除重复项(附完整源码)

    C语言从已排序的链表中删除重复项 C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) #include ...

  3. 请给出一个时间为O(nlgk)、用来将k个已排序链表的算法。此处n为所有输入链表中元素的总数。...

    代码: #include "iostream" #define null 0 using namespace std;typedef struct node{int data;st ...

  4. [转载]:合并两个已排序好的int数组,并排序返回c#实现

    http://www.cnblogs.com/relang99/archive/2008/09/09/1287572.html /// <summary>         /// 两个从小 ...

  5. 求两个已排序单链表中相同的数据(C语言)

    PSListNode ByeNode(DataType data) {PSListNode pNewNode = (PSListNode)malloc(sizeof(struct SListNode) ...

  6. Leetcode 21:Merge Two Sorted Lists(golang实现合并两条已经排序的链表)

    21.Merge Two Sorted Lists 题目链接:题目链接 Merge two sorted linked lists and return it as a new list. The n ...

  7. 数据结构实验报告——排序算法设计及分析(排序单链表)

    一.实验目的和要求 通过学习多种排序算法,体会对同一种操作多种不同的算法设计:通过比较各排序算法对于数据存储结构的要求,体会算法设计不依赖于数据存储结构,而算法实现依赖于数据存储结构:通过分析排序算法 ...

  8. 剑指offer:合并两个排序的链表 python实现 合并K个排序的链表

    题目 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 对应LeetCode21. 解题思路 暴力求解: 新建一个链表: 依次判断两个链表的大小, ...

  9. 《剑指offer》-- 链表中倒数第k个节点、反转链表、合并两个排序的链表

    一.链表中倒数时第k个节点: 1.题目: 输入一个链表,输出该链表中倒数第k个结点. 2.解题思路:单链表具有单向移动的特性. (1)第一种:先遍历链表,算出链表节点数count,第二次直接遍历到第c ...

最新文章

  1. 【杂谈】Oracle里scott的由来
  2. 服务模拟-ServiceMock
  3. pytorch定义神经卷积网络CNN源码
  4. 机器学习中有哪些距离度量方式
  5. navicat快捷键
  6. linux系统原理是什么意思,Linux系统原理之整体概述
  7. 23种设计模式之模板方法
  8. sigmoid函数解决溢出_常见激活函数优缺点与dead relu problem
  9. 经典的同态滤波算法的优化及其应用参数配置
  10. 三菱PLC与上位机进行通讯
  11. 修改redis配置文件,并以指定配置文件的方式启动
  12. 为什么需要云计算机,为什么需要云计算?
  13. 英语修辞手法( rhetorical devices)
  14. Adam优化算法中的指数移动平均
  15. WEB前端网页设计-Bootstrap4 信息提示框
  16. linux man 中文 mac,技术|MAC 系统中显示中文MAN手册
  17. 蓝以中老师《高等代数》第01章:代数学的经典课题,笔记
  18. mac的防火墙工具pf
  19. HMI实时显示网络摄像机监控画面——以海康威视网络摄像机为例
  20. java 内嵌chrome_Java嵌入谷歌内核简单浏览器

热门文章

  1. 利用线性代数的方法求斐波那契数列的通项
  2. 376 Wiggle Subsequence 贪心解法以及证明
  3. [CTF][Web][PHP][JavaScript]弱类型问题
  4. 【数据结构与算法】字符串匹配 KMP 算法
  5. 布尔运算_3dmax教程 - 布尔运算
  6. c语言程序设计实践教程课,C语言程序设计实践训练教程
  7. python实现图形旋转_Python3+OpenCV2实现图像的几何变换
  8. 自梦php,PHP菜狗自学之路 云之梦php php之窗 php脚本之
  9. QString转char*的问题
  10. 理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式