• 【力扣 088】23. 合并K个升序链表


    23. 合并K个升序链表

    给你一个链表数组,每个链表都已经按升序排列。

    请你将所有链表合并到一个升序链表中,返回合并后的链表。

    示例 1:

    输入:lists = [[1,4,5],[1,3,4],[2,6]]
    输出:[1,1,2,3,4,4,5,6]
    解释:链表数组如下:
    [
      1->4->5,
      1->3->4,
      2->6
    ]
    将它们合并到一个有序链表中得到。
    1->1->2->3->4->4->5->6
    示例 2:

    输入:lists = []
    输出:[]
    示例 3:

    输入:lists = [[]]
    输出:[]
     

    提示:

    k == lists.length
    0 <= k <= 10^4
    0 <= lists[i].length <= 500
    -10^4 <= lists[i][j] <= 10^4
    lists[i] 按 升序 排列
    lists[i].length 的总和不超过 10^4

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/merge-k-sorted-lists
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    代码实现:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode() : val(0), next(nullptr) {}
     *     ListNode(int x) : val(x), next(nullptr) {}
     *     ListNode(int x, ListNode *next) : val(x), next(next) {}
     * };
     */
    class Solution {
    public:
        ListNode* mergeKLists(vector<ListNode*>& lists) 
        {
            auto cmp = [](ListNode *a, ListNode *b) {return a->val > b->val; };
            priority_queue<ListNode *, vector<ListNode *>, decltype(cmp)> qu(cmp);
            
            for(auto c: lists)
            {
                if(c)
                    qu.push(c);
            }
            ListNode *p = new ListNode(-1), *dumpy = p;
            while(!qu.empty())
            {
                auto curr = qu.top();
                qu.pop();
                dumpy->next = curr;
                dumpy = curr;
                if(curr->next) qu.push(curr->next);
            }
            return p->next;
        }
    };
  • 相关阅读:
    博客图片上传picgo工具安装配置github图传使用
    安装配置hexo icarus主题配置
    通往远方的道路总是漫长的
    java 关于值引用、地址引用的问题
    Java设计模式の迭代器模式
    Java设计模式の模版方法模式
    vim 常用快捷键(整理版)
    Java设计模式の责任链模式
    Java设计模式の代理模式
    java rmi远程方法调用实例
  • 原文地址:https://www.cnblogs.com/sunbines/p/16328185.html
Copyright © 2020-2023  润新知