zoukankan      html  css  js  c++  java
  • Merge K Sorted Lists -- LeetCode

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

    思路:构建一个大小为K的小顶堆。每次从堆顶取走一个元素后,都将这个元素所属的链表中下一个元素加入堆中。若没有下一个元素则不添加。该过程一直持续到堆空位置。时间复杂度O(nlogk)。

    用优先队列实现:

    用优先队列实现的声明如下:

    priority_queue<元素类型, 该类型的容器(如vector<元素类型>), 比较类(自己定义)> 名称;

    比如这个题中,我的声明语句为priority_queue<ListNode *, vector<ListNode *>, comp> q;

    这里,ListNode指针类型的星号要与前面的类型名称用空格隔开,否则会报错。

    比较类定义见具体代码。

     1 struct comp
     2 {
     3     bool operator()(ListNode* n1, ListNode* n2)
     4     {
     5         return n1->val > n2->val;
     6     }
     7 };
     8 class Solution {
     9 public:
    10     ListNode* mergeKLists(vector<ListNode*>& lists) {
    11         priority_queue<ListNode *, vector<ListNode *>, comp> q;
    12         for (auto i : lists)
    13             if (i) q.push(i);
    14         if (q.empty()) return NULL;
    15         ListNode* res = q.top();
    16         ListNode* pre = res;
    17         q.pop();
    18         if (pre->next) q.push(pre->next);
    19         while (!q.empty())
    20         {
    21             pre->next = q.top();
    22             q.pop();
    23             pre = pre->next;
    24             if (pre->next)
    25                 q.push(pre->next);
    26         }
    27         return res;
    28     }
    29 };
  • 相关阅读:
    置换及Polya定理
    题解 UVa10943
    Error applying site theme: A theme with the name "Jet 1011" and version already exists on the server.
    用shtml来include网页文件
    SQL 2005 附加数据库出错"解决方法
    SVN 配置 入门教程
    Oracle .Net Develoer
    JdbcTemplate完全学习
    SVD外积展开式
    初识 Nslookup 命令
  • 原文地址:https://www.cnblogs.com/fenshen371/p/5162087.html
Copyright © 2011-2022 走看看