LeetCode题目23:合并K个排序链表
时间:2022-07-23
本文章向大家介绍LeetCode题目23:合并K个排序链表,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
原题描述
+
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
原题链接:https://leetcode-cn.com/problems/merge-k-sorted-lists
思路解析
+
在面试的时候,面试官可能会先问你下面这道题。
然后再问你,如何合并k个有序链表。
挨个合并是绝对没有问题的,这样只需要k-1次合并就能完成。其实更好的方法是两两合并。比如说,先让1和k-1合并,再让2和k-2合并....如此一来,合并的次数就降到了log级别。思路确实简单,但实现的时候需要递归。下图展示了8个链表,在两两合并情况下的合并过程。
复杂度分析
+
- 时间复杂度:
- 空间复杂度:
C++参考代码
+
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* head = new ListNode(-1);
ListNode *p1 = l1, *p2 = l2, *q = head;
int val = 0;
while (p1 != NULL && p2 != NULL) {
if (p1->val <= p2->val) {
q->next = p1;
p1 = p1->next;
} else {
q->next = p2;
p2 = p2->next;
}
q = q->next;
}
q->next = p1 != NULL ? p1 : p2;
return head->next;
}
ListNode* mergeKLists(vector<ListNode*>& lists, int begin, int end) {
if (begin > end) return NULL;
if (begin == end) return lists[begin];
int mid = (begin + end) / 2;
return mergeTwoLists(mergeKLists(lists, begin, mid), mergeKLists(lists, mid + 1, end));
}
ListNode* mergeKLists(vector<ListNode*>& lists) {
return mergeKLists(lists, 0, lists.size() - 1);
}
};
- 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 数组属性和方法
- keras训练浅层卷积网络并保存和加载模型实例
- Python分析最近大火的网剧《隐秘的角落》
- PHP使用PDO操作sqlite数据库应用案例
- 一次因composer错误使用引发的问题与解决
- PHP生成二维码与识别二维码的方法详解【附源码下载】
- 详解PHP多个进程配合redis的有序集合实现大文件去重
- 原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
- php ajax confirm 删除实例详解
- PHP模糊查询技术实例分析【附源码下载】
- 解决keras,val_categorical_accuracy:,0.0000e+00问题
- 导致python中import错误的原因是什么
- Python RabbitMQ实现简单的进程间通信示例
- PHP删除数组中特定元素的两种方法
- 如何写出让同事无法维护的代码?
- 浅谈php://filter的妙用