zoukankan      html  css  js  c++  java
  • leetcode23 合并k个排序链表(Hard)

    题目来源:leetcode23 合并k个排序链表

    题目描述:

    合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

    示例:

    输入:
    [
      1->4->5,
      1->3->4,
      2->6
    ]
    输出: 1->1->2->3->4->4->5->6

    解题思路:

    用优先队列实现最小堆。将每个链表的第一个结点加入最小堆中,不断去最小堆的堆顶,就是最小元素,再把最小元素所在链表的下一个结点加入堆中,维护堆的特性,直到所有链表的结点都被取出。

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        struct cmp {
            bool operator()(ListNode *l1,ListNode *l2) const{
                return l1->val>l2->val;
            }
        };
        ListNode* mergeKLists(vector<ListNode*>& lists) {
            priority_queue<ListNode*,vector<ListNode*>,cmp> pq;//最小堆
            for(int i=0;i<lists.size();i++){
                if(lists[i])
                    pq.push(lists[i]);
            }
            ListNode *ans=new ListNode(-1);
            ListNode *temp=ans;
            while(!pq.empty()){
                ListNode *t=pq.top();
                temp->next=t;
                temp=temp->next;
                pq.pop();
                if(t->next) pq.push(t->next);
            }
            return ans->next;
        }
    };
    
  • 相关阅读:
    Python 15 爬虫(一)
    Python 14 Mysql数据库(二)
    Python 13 JQuery&Bootstrp
    Python 12 CSS&JavaScript&DOOM
    Python 11 HTML
    Python 10 MySQL数据库(一)
    Python 9 Redis
    Python 8 协程
    Python 7 并发编程
    SNMP协议详解
  • 原文地址:https://www.cnblogs.com/yjcoding/p/13308756.html
Copyright © 2011-2022 走看看