zoukankan      html  css  js  c++  java
  • Merge k Sorted Lists

    题目:Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.


    思路:

    本题使用优先队列,所有的链表按照第一个数字的大小排进去,

    然后进入一个循环,每次出来的都是最小的,再存放进去一个链表。

    如此循环反复。

    代码:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    private:
        class Comp{
            public:
            bool operator()(const ListNode *l1,ListNode *l2){
                return l1->val>l2->val;
            }
        };
    
    public:
        ListNode *mergeKLists(vector<ListNode *> &lists) {
            if(lists.empty())   return NULL;
            
            ListNode *dummy=new ListNode(0),*tail=dummy;
            priority_queue<ListNode *,vector<ListNode *>,Comp>pq;
            
            for(int i=0;i<lists.size();i++){
                if(lists[i])    pq.push(lists[i]);
            }
            
            while(!pq.empty()){
                ListNode *tmp=pq.top();pq.pop();
                if(tmp->next)   pq.push(tmp->next);
                tail->next=tmp;
                tail=tail->next;
            }
            //pq优先队列里面已经是最大堆,每一个链表的第一个数都是按照最大的顺序排列。
            ListNode *head=dummy->next;
            delete dummy;
            return head;
        }
    };


  • 相关阅读:
    Electron踩坑记录
    TypeScript实现设计模式——生成器模式
    在express中使用ES7装饰器构建路由
    微信小程序下载文件(非图片),并校验扩展名。
    防抖与节流
    yarn
    spark
    docker php-fpm中安装GD库
    thinkphp6 多应用路由遇坑记
    CentOS 7 开启SSH远程登录
  • 原文地址:https://www.cnblogs.com/jsrgfjz/p/8519836.html
Copyright © 2011-2022 走看看