LeetCode 23. Merge k Sorted Lists

解法一:Priority Queue

优先队列实际是对每次对list头结点依次比较排序的一种优化。插入和删除时间复杂度都为O(logk)。一共n个数的话总共是O(nlogk)。

复习一下优先队列的写法。

class Solution {
public:
    struct cmp{
        bool operator()(ListNode *&a, ListNode *&b){
            return a->val > b->val;
        }
    };
    
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        priority_queue<ListNode *, vector<ListNode *>, cmp> q;
        for (auto list:lists)
            if (list) q.push(list);
        ListNode *head=new ListNode(0), *p=head;
        while (!q.empty()){
            ListNode *tmp=q.top(); q.pop();
            if (tmp->next) q.push(tmp->next);
            p->next = tmp;
            p = p->next;
        }
        return head->next;
    }
};

 

解法二:Divide and Conquer

posted @ 2018-07-25 23:30  約束の空  阅读(86)  评论(0)    收藏  举报