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

浙公网安备 33010602011771号