leetcode第22题--Merge k Sorted Lists
problem:Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
先合并两个list,再根据归并排序的方法递归合并。假设总共有k个list,每个list的最大长度是n,那么运行时间满足递推式T(k) = 2T(k/2)+O(n*k)。根据主定理,可以算出算法的总复杂度是O(nklogk)。空间复杂度的话是递归栈的大小O(logk)。
/**
* 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) // 将两个list merge
{
if(!l1)
return l2;
if(!l2)
return l1;
ListNode *tmp = new ListNode();
ListNode *ans = tmp;
while(l1 && l2)
{
if(l1 -> val < l2 -> val)
{
ans -> next = l1;
ans = ans -> next;
l1 = l1 -> next;
}
else
{
ans -> next = l2;
ans = ans -> next;
l2 = l2 -> next;
}
}
if (l1)
{
while(l1)
{
ans -> next = l1;
ans = ans -> next;
l1 = l1 -> next;
}
} if (l2)
{
while(l2)
{
ans -> next = l2;
ans = ans -> next;
l2 = l2 -> next;
}
}
ans = tmp;
delete ans;
return tmp -> next;
}
ListNode *reMerge(vector<ListNode *> &lists, int l, int r)
{
if(l < r) // 类似于归并排序,把一大块分成l和r两块,然后将两个合并(l和r也还可以再分)
{
int m = (l + r)/;
return mergeTwoLists(reMerge(lists, l, m), reMerge(lists, m + , r));
}
else
return lists[l];
}
ListNode *mergeKLists(vector<ListNode *> &lists)
{
ListNode *ans = NULL;// 用NULL 而不是利用 new ListNode(0)
if (lists.size() == )
return ans;
return reMerge(lists, , lists.size() - );
}
};
leetcode第22题--Merge k Sorted Lists的更多相关文章
- LeetCode(23)Merge k Sorted Lists
题目 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...
- 乘风破浪:LeetCode真题_023_Merge k Sorted Lists
乘风破浪:LeetCode真题_023_Merge k Sorted Lists 一.前言 上次我们学过了合并两个链表,这次我们要合并N个链表要怎么做呢,最先想到的就是转换成2个链表合并的问题,然后解 ...
- 【LeetCode练习题】Merge k Sorted Lists
Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...
- [Leetcode][Python]23: Merge k Sorted Lists
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 23: Merge k Sorted Listshttps://oj.leet ...
- 蜗牛慢慢爬 LeetCode 23. Merge k Sorted Lists [Difficulty: Hard]
题目 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...
- Leetcode 23.Merge Two Sorted Lists Merge K Sorted Lists
Merge Two Sorted Lists Merge two sorted linked lists and return it as a new list. The new list shoul ...
- 【leetcode】Merge k Sorted Lists
Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...
- LeetCode之“链表”:Merge Two Sorted Lists && Merge k Sorted Lists
1. Merge Two Sorted Lists 题目链接 题目要求: Merge two sorted linked lists and return it as a new list. The ...
- LeetCode: Merge k Sorted Lists 解题报告
Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...
随机推荐
- 两年前实习时的文档——MMC学习总结
1概述 驱动程序实际上是硬件与应用程序之间的中间层.在Linux操作系统中,设备驱动程序对各种不同的设备提供了一致的訪问接口,把设备映射成一个特殊的设备文件,用户程序能够像其它文件一样对设备文件进行操 ...
- HDOJ 1753 明朝A+B
http://acm.hdu.edu.cn/showproblem.php? pid=1753 大明A+B Time Limit: 3000/1000 MS (Java/Others) M ...
- Oracle存储过程详解(引用)+补充(转) dbms_output包 good
执行存储过程时,execute和call的区别 EXEC is a sqlplus command that put its argument as an anonymous pl/sql block ...
- Android采访开发——2.通用Android基础笔试题
注意finddreams博客: http://blog.csdn.net/finddreams/article/details/44219231 正值跳槽的热季.整理一下Android面试中最常考的笔 ...
- Oracle 数据恢复指导具体解释
1.数据恢复指导 : 高速检測.分析和修复故障 最大程度地降低停机故障和执行时故障 将对用户的干扰降到最低 用户界面: --EM GUI 界面 (多个路径) --RMAN 命令行 支持的数 ...
- C#管理控制IIS7的方法
原文:C#管理控制IIS7的方法 转自 http://www.lob.cn/jq/csyy/7285.shtml 把在找到正确方法前遇到的挫折也拿出来与大家分享,相信不少朋友从iis6到iis7的过渡 ...
- 补间动画实现(tween)
1.补间动画的概念: 补间动画:仅仅须要开发人员设置好动画的開始与结束的关键帧 中间帧有喜用计算机补齐. 2.种类:分为4种: ①alpha 透明度 ②alpha 透明度 ③translate 位置移 ...
- SVN在branch兼并和游戏patch(1)
近期要hadoop2.4关于上面的行hdfs raid,但在此之前hdfs raid如svn 的branch发展,领导人希望patch方式hdfs raid功能进球trunk里面去,这里涉及到svn ...
- 数字使用相应的加密策略传递一个字符串后Java实现代码
公司采用公用电话传递数据,数据小于8整数位,为了确保安全, 在转移的过程中需要加密,加密规则如下面的: 第一个数据下降,附图然后各加5,和除以10的余数取代该数字, ...
- 大约SQL/NoSQL数据库搜索/思考查询
转载请注明出处:jiq•钦's technical Blog Hbase特征: 近期在学习Hbase.Hbase基于行健是建立了索引的,查询速度会很快,全然实时. 可是Hbase要基于行健之外的字段进 ...