力扣:23.合并 K 个升序链表

  1. 时间复杂度是 O(NlogK)O(NlogK)O(NlogK) N 个节点,K 个链表。
  2. 小根堆可以直接常数时间找到最小值,但是每次 pop 或者 push 需要 logk 的时间。
cpp 复制代码
class Solution {
public:
    struct cmp {
        bool operator() ( ListNode *a, ListNode *b ) {
            return a->val > b->val;
        }
    };
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        priority_queue<ListNode*, vector<ListNode*>, cmp> heap;
        for ( auto head: lists ) if ( head ) heap.push( head );
        ListNode dummy;
        ListNode* cur = &dummy;
        while ( !heap.empty() ) {
            ListNode *minNode = heap.top();
            heap.pop();
            cur->next = minNode, cur = cur->next;
            if ( minNode->next ) heap.push( minNode->next );
        }
        return dummy.next;
    }
};
相关推荐
大白话_NOI4 小时前
【洛谷 P2249】查找(深基 13. 例 1)+ 详细分析
c++·算法
吠品4 小时前
C++实现m行n列带边框的长方形输出
算法
智者知已应修善业4 小时前
【51单片机2个外部中断显示中断历时,初始化8左移3位共阳数码管】2024-6-6
c++·经验分享·笔记·算法·51单片机
西安邮电大学5 小时前
分治算法详细讲解
java·后端·其他·算法·面试
code bean5 小时前
平衡相关性与多样性:推荐系统中的永恒博弈与 MMR 算法详解
算法
青梅橘子皮5 小时前
Linux---进程控制(2)(进程程序替换)
linux·c++·算法
Shan12055 小时前
经典问题——验证栈序列
数据结构·算法
2501_906565125 小时前
勾股定理证明
算法
Shan12056 小时前
无向图的Hierholzer算法流程(二)
算法
gihigo19986 小时前
基于蒙特卡洛的异常值剔除(RANSAC + MC置信区间)—MATLAB实现
开发语言·算法·matlab