problem:

Merge k sorted linked lists and return it as one sorted list.
Analyze and describe its complexity. Tags Divide and Conquer Linked List Heap

合并K个已序单链表

thinking:

(1)题目没有要求不能够新开ListNode,所以暴力破解法:提取K个list的keyword。排序、新建结点插入。这样的情况对原list是否排好序没有要求。

排序时间复杂度能够做到O(N* log N )。提取keyword和新建结点的时间复杂度都为O(N),所以总的时间复杂度为O(N*logN),这没有考虑新建结点的时间浪费和空间           浪费。

(2)採用能够容纳结点的容器,想到的是堆,或者堆的封装-优先队列,因为堆的O(N*logN)排序的时间复杂度。并且不用新开结点,节省空间。

暴力法:

/**
* 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) {
ListNode *newlist=NULL;
vector<int> tem;
for(int i=0;i<lists.size();i++)
{
while(lists.at(i)!=NULL)
{
tem.push_back(lists.at(i)->val);
lists.at(i)=lists.at(i)->next;
}
}
if(tem.size()==0)
return NULL;
sort(tem.begin(),tem.end());
for(int i=tem.size()-1;i>=0;i--)
{
ListNode *p = new ListNode(tem.at(i));
p->next = newlist;
newlist = p; }
return newlist;
}//mergeKLists() };

优先队列法:

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class ListNodeCompare:public binary_function<ListNode*,ListNode*,bool>
{
public:
bool operator()(ListNode* t1,ListNode* t2)const
{
if ( !t1||!t2 )
return !t2;
return t1->val>t2->val;
}
};
class Solution {
public:
ListNode *mergeKLists(vector<ListNode *> &lists) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if (lists.empty())
return NULL;
priority_queue<ListNode*,vector<ListNode*>,ListNodeCompare> Q;
for(int i=0;i<lists.size();i++)
if ( lists[i]!=NULL)
Q.push(lists[i]);
ListNode guard(-1);
ListNode* tail=&guard;
while(!Q.empty())
{
ListNode* toAdd=Q.top();
Q.pop();
tail->next=toAdd;
tail=tail->next;
if (toAdd->next)
Q.push(toAdd->next);
}
return guard.next;
}
};

leecode 题解 || Merge k Sorted Lists 问题的更多相关文章

  1. [LeetCode 题解]: Merge k Sorted Lists

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 题 ...

  2. Merge k Sorted Lists

    1. Merge Two Sorted Lists 我们先来看这个 问题: Merge two sorted linked lists and return it as a new list. The ...

  3. 71. Merge k Sorted Lists

    Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...

  4. 【leetcode】Merge k Sorted Lists

    Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...

  5. 【LeetCode练习题】Merge k Sorted Lists

    Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...

  6. [Leetcode][Python]23: Merge k Sorted Lists

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 23: Merge k Sorted Listshttps://oj.leet ...

  7. 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 ...

  8. leetcode-algorithms-23 Merge k Sorted Lists

    leetcode-algorithms-23 Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted ...

  9. python 中的堆 (heapq 模块)应用:Merge K Sorted Lists

    堆是计算机科学中一类特殊的数据结构的统称.堆通常是一个可以被看做一棵树的数组对象.在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短 ...

随机推荐

  1. FusionCharts之我用

    fusioncharts:(此控件需flash支持) 介绍:http://baike.baidu.com/link?url=SOheR7sQlb93S5TqYmeI7FhtJ0V9ABNwH6OsAa ...

  2. blender_(uv应用)................http://digitalman.blog.163.com/blog/static/23874605620174172058299/

    轻松学习Blender基础入门之九:UV-1 2017-06-21 14:24:49|  分类: Blender |举报 |字号 订阅     下载LOFTER 我的照片书  |   [前言]     ...

  3. Python自学-2-python解释器

    写python源文件,以.py为后缀名 用python解释器去执行.py文件 python解释器 CPython:官方版本,由C语言开发的,下载默认就是这个,使用最广的解释器.   用>> ...

  4. Vue.js 计算属性(computed)

    Vue.js 计算属性(computed) 如果在模板中使用一些复杂的表达式,会让模板显得过于繁重,且后期难以维护.对此,vue.js 提供了计算属性(computed),你可以把这些复杂的表达式写到 ...

  5. 17Aspectij

    17Aspectij-2018/07/31 1.Aspectj基于xml 前置通知 method : 通知,及方法名 pointcut :切入点表达式,此表达式只能当前通知使用. pointcut-r ...

  6. 用php生成HTML文件的类

    目的 用PHP生成HTML文档, 支持标签嵌套缩进, 支持标签自定义属性 起因 这个东西确实也是心血来潮写的, 本来打算是输出HTML片段用的, 但后来就干脆写成了一个可以输出完整HTML的功能; 我 ...

  7. vue axios请求超时,设置重新请求的完美解决方法

    //在main.js设置全局的请求次数,请求的间隙 axios.defaults.retry = 4; axios.defaults.retryDelay = 1000; axios.intercep ...

  8. 2018.5.7每天一题面试题----final, finally, finalize 的区别

    1.final修饰符(关键字).被final修饰的类,就意味着不能再派生出新的子类,不能作为父类而被子类继承. 因此一个类不能既被abstract声明,又被final声明.将变量或方法声明为final ...

  9. [luoguP2758] 编辑距离(DP)

    传送门 f[i][j] 表示第一串前 i 个到第二串前 j 个的最小编辑距离 f[i][j] = f[i - 1][j - 1] (s1[i] == s2[j]) f[i][j] = min(f[i ...

  10. Codeforces Round #239(Div. 2) 做后扯淡玩

    今天补了下 cf 239div2 顿时信心再度受挫 老子几乎已经木有时间了啊 坐着等死的命.哎!!! 到现在还只能做大众题,打铁都不行. 每次D题都是有思路敲错,尼玛不带这么坑爹的. 哎!不写了,写这 ...