【LeetCode】【数组归并】Merge k Sorted Lists
生活随笔
收集整理的這篇文章主要介紹了
【LeetCode】【数组归并】Merge k Sorted Lists
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
描述
Merge?k?sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Example:
Input: [1->4->5,1->3->4,2->6 ] Output: 1->1->2->3->4->4->5->6思路
借鑒Merge Two Sorted Lists的解決思路,對兩個數組先進行排序,然后兩兩組合,排成一個序列。
將此視為一種迭代的分而治之的解決方案。
mergeTwoLists方法是一種遞歸的合并兩個序列的方法注意:
盡量不用erase方法,太耗時。
一些優化以避免vector.erase()
比如下述:
while(lists.size() > 1){lists.push_back(mergeTwoLists(lists[0], lists[1]));lists.erase(lists.begin());lists.erase(lists.begin());}return lists.front();改為使用指針方法遍歷vector,最后取vector.back()
最終解決方案:
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode* mergeKLists(vector<ListNode*>& lists) {if(lists.empty()){return nullptr;}if(lists.size() == 1) return lists[0];int i = 0;while(i < lists.size() - 1){lists.push_back(mergeTwoLists(lists[i], lists[i+1]));i += 2;}return lists.back();}ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {if(l1 == nullptr){return l2;}if(l2 == nullptr){return l1;}if(l1->val <= l2->val){l1->next = mergeTwoLists(l1->next, l2);return l1;}else{l2->next = mergeTwoLists(l1, l2->next);return l2;}} };?
轉載于:https://www.cnblogs.com/ygh1229/p/9718627.html
總結
以上是生活随笔為你收集整理的【LeetCode】【数组归并】Merge k Sorted Lists的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下搭建hexo环境
- 下一篇: B1277 [HNOI2002]Tinu