首页 > 其他分享 >23. 合并 K 个升序链表

23. 合并 K 个升序链表

时间:2024-05-08 20:13:12浏览次数:24  
标签:pq ListNode val 23 top next 链表 升序

23. 合并 K 个升序链表

https://leetcode.cn/problems/merge-k-sorted-lists/?envType=study-plan-v2&envId=top-interview-150

 

思路

K个升序链表,依据显然的规则:

当前最小的值,肯定出自于K个升序链表的K个表头中,

对这K个表头使用最小堆(priority_queue)进行管理,pop出的堆顶值,就是当前最小值

剩下 K-1 表头在堆中, 将 当前最小值所有链表 的 第二小 元素 入堆,

继续求第二小值

。。。。。。

 

Code

/**
 * 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) {}
 * };
 */

struct QNODE{
    int val;
    ListNode* node;
    bool operator < (const QNODE &qnode) const{
        return val > qnode.val;
    }
};

class Solution {
public:
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        priority_queue <QNODE> pq;

        for(auto one: lists){
            if (one){
                pq.push({one->val, one});
            }
        }

        ListNode head, *tail = &head;

        while(!pq.empty()){
            QNODE top = pq.top();
            pq.pop();

            tail->next = top.node;
            tail = tail->next;

            if (top.node->next){
                pq.push({top.node->next->val, top.node->next});
            }
        }

        return head.next;
    }
};

 

 

优先队列

https://zhuanlan.zhihu.com/p/355974733

https://www.cnblogs.com/shona/p/12163381.html

 

注意最小堆和最大堆的原型差异

 //升序队列  小顶堆 great 小到大
 priority_queue <int,vector<int>,greater<int> > pq;//升序
 //降序队列  大顶堆 less  大到小 默认
 priority_queue <int,vector<int>,less<int> > pq;//降序

 

 

 

标签:pq,ListNode,val,23,top,next,链表,升序
From: https://www.cnblogs.com/lightsong/p/18180765

相关文章

  • 23种设计模式笔记-结构型模式
    23种设计模式-结构型模式笔记模板模式前提-模式:概念:规则:实现细节:应用场景:示意图:代码实现:创建型模式适配器、桥接、组合、装饰、外观、享元、代理。适配器模式-接口兼容思想概念:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一......
  • ISCC线上赛2023
    ISCC线上赛2023webweb1双重base解码得到flagweb3F12控制台查看可找到loveStory.phpEnc.phpdownload.php,loveStory.php为反序列源码boy::__destruct()-->girl()::__call()-->helper()::__isset()-->boy()::__toString()-->helper()::__get()-->love_story()::__love()......
  • 程设2023期末
    A.围栏#include<iostream>usingnamespacestd;intmain(){ longlongn,ans=0;cin>>n; for(longlongi=1;i<=n;++i){ longlongtmp=(n+i-1)/i; if(tmp<i)break; ans=max(ans,(i+tmp)*2); }cout<<ans<&l......
  • 关于单向不循环链表的创建、插入、删除、遍历、检索
    关于单向不循环链表的创建、插入、删除、遍历、检索单向不循环链表公式初始化单向不循环链表构建单向不循环链表结构体//创建结构体类型typedefstructone_way_node{//数据域chardata[DATA_LEN];//指针域structone_way_node*next;}ONE_WAY_NOD......
  • Leetcode --- 203. 移除链表元素
    题目描述给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val==val 的节点,并返回 新的头节点 。示例1: 示例输入:head=[1,2,6,3,4,5,6],val=6输出:[1,2,3,4,5]输入:head=[7,7,7,7],val=7输出:[]参考实现方式1、使用递归实现......
  • [COCI2022-2023#1] Berilij 题解
    SolutionP9030[COCI2022-2023#1]Berilij本题解转载翻译自官方题解:COCI2022/2023CONTEST1Part1让我们定义图形\(G\),顶点代表飞船,边代表两艘飞船外部接触的情况。此外,让边的边权成为它所连接的圆之间的距离。现在的任务等同于为顶点找到非负值,使得每条边所连接的两个顶......
  • 自定义单链表(非循环)的基本接口函数
    文件描述及头文件包含/********************************************************************* 文件名称: 单链表(非循环)的基本接口程序* 文件作者:[email protected]* 创建日期:2024/05/07* 文件功能:对单链表的增删改查功能的定义* 注意事项:No......
  • 自定义单链表(非循环)反转的基本函数接口
    题干structListNode*ReverseList(structListNode*head){if(head==NULL||head->next==NULL){returnhead;}else{structListNode*Phead=head;structListNode*temp=head->next;Phead->next=NULL;......
  • 2024.4.23
    继续之前任务@keyframescuIcon-spin{ 0%{ -webkit-transform:rotate(0); transform:rotate(0); } 100%{ -webkit-transform:rotate(359deg); transform:rotate(359deg); }}.cuIconfont-spin{ -webkit-animation:cuIcon-spin2sinfinitelinear; animation:cuIc......
  • 界面控件DevExtreme v23.1、v23.2盘点 - 增强的TypeScript(Angular、React、Vue)
    DevExtreme拥有高性能的HTML5/JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NETCore,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac,到ASP.NETCore或Vue,DevExtreme包含全面的高性能和响应式UI小部件集合,可在传统Web和下一代移动应用程序中......