力扣: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;
    }
};
相关推荐
青少儿编程课堂11 分钟前
蓝桥杯青少组图形化 STEMA 省考(报名倒计时·11/22开考)+ 全国青少年信息素养大赛 2026—2027赛季 + 电子学会图形化考级:校园华容道大闯关
c++·python·算法·bfs·信息学竞赛
在猴站学算法1 小时前
(《统计学习方法》(第2版) 李航)第2章 感知机算法
学习·算法·机器学习·统计学习
Rainmicro1 小时前
【无标题】
java·数据库·算法
NEFU_Jyj11 小时前
牛客周赛R168
算法
文丑颜不良啊18 小时前
LeetCode2221~2240题目解析
java·leetcode
Navigator_Z19 小时前
LeetCode //C - 1317. Convert Integer to the Sum of Two No-Zero Integers
c语言·算法·leetcode
D e re k ZH19 小时前
C++ 标准库算法全景指南
数据结构·c++·算法
冻柠檬飞冰走茶20 小时前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划