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 };
  • 相关阅读:
    DHCP服务的配置(linux)
    LVM逻辑卷
    python的元素列表
    DOS和DDOS你知道多少?
    DOS与DDOS攻击的原理与防范之法
    常见HTTP状态代码,http报错代码翻译
    TCP和UDP优缺点
    DLL何时需共享内存管理器
    Delphi 指针大全
    Delphi编写DLL(以及静态和动态方式调用)
  • 原文地址:https://www.cnblogs.com/fenshen371/p/5162087.html
Copyright © 2011-2022 走看看