力扣: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;
    }
};
相关推荐
kiracrimson35 分钟前
从缓存的角度看链表与线性表的差异
数据结构·链表·缓存
木井巳2 小时前
【BFS/DFS 解决 FloodFill 算法】太平洋大西洋水流问题
java·算法·leetcode·深度优先·广度优先·宽度优先·推荐算法
心抵鹊2 小时前
归并排序之翻转对(hard)
数据结构·算法
白山编程大哥2 小时前
Java 集合算法:从排序、查找到底层原理的实战指南
java·python·算法
shehuiyuelaiyuehao2 小时前
算法34,位运算符操作,总结
算法
Navigator_Z2 小时前
LeetCode //C - 1224. Maximum Equal Frequency
c语言·算法·leetcode
Navigator_Z3 小时前
LeetCode //C++ - 1226. The Dining Philosophers
c语言·算法·leetcode
FOORIR3 小时前
3D视觉+AI客流系统怎么做:从Sensor Pipeline到数据事件引擎
算法
Omics Pro5 小时前
Arc研究所Cell|全新虚拟细胞官方基准评测框架
大数据·人工智能·深度学习·算法·机器学习
CoderYanger7 小时前
A.每日一题:1140. 石子游戏 II
java·程序人生·算法·leetcode·游戏·职场和发展·深度优先