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 };
  • 相关阅读:
    自定义input file样式
    input text 不显示输入的历史记录
    白话 P-value
    R博客
    安装NXNET
    形象的解释神经网络激活函数的作用是什么?
    嵌入式选择与L1正则化
    “梯度下降法”理解
    控制台乱码
    R语言快捷键
  • 原文地址:https://www.cnblogs.com/fenshen371/p/5162087.html
Copyright © 2011-2022 走看看