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;
        }
    };


  • 相关阅读:
    UIButton组件
    九宫格
    window对象的创建
    UILabel的属性及方法
    javascript相关,格式转化
    MySQL分区分表相关知识摘要
    redis简单笔记
    PHP常用设计模式
    在nginx上面部署多个项目
    把自己的项目上传到svn上面
  • 原文地址:https://www.cnblogs.com/jsrgfjz/p/8519836.html
Copyright © 2011-2022 走看看