日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leecode 题解 || Merge k Sorted Lists 问题

發布時間:2023/12/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leecode 题解 || Merge k Sorted Lists 问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

problem:

Merge k sorted linked lists and return it as one sorted list.Analyze and describe its complexity.Tags Divide and Conquer Linked List Heap
合并K個已序單鏈表


thinking:

?(1)題目沒有要求不能夠新開ListNode,所以暴力破解法:提取K個list的keyword。排序、新建結點插入。這樣的情況對原list是否排好序沒有要求。

? ? ? ? ?排序時間復雜度能夠做到O(N* log N )。提取keyword和新建結點的時間復雜度都為O(N),所以總的時間復雜度為O(N*logN),這沒有考慮新建結點的時間浪費和空間 ? ? ? ? ? 浪費。

(2)採用能夠容納結點的容器,想到的是堆,或者堆的封裝-優先隊列,因為堆的O(N*logN)排序的時間復雜度。并且不用新開結點,節省空間。

暴力法:

/*** 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) {ListNode *newlist=NULL;vector<int> tem;for(int i=0;i<lists.size();i++){while(lists.at(i)!=NULL){tem.push_back(lists.at(i)->val);lists.at(i)=lists.at(i)->next;}}if(tem.size()==0)return NULL;sort(tem.begin(),tem.end());for(int i=tem.size()-1;i>=0;i--){ListNode *p = new ListNode(tem.at(i));p->next = newlist;newlist = p;}return newlist;}//mergeKLists()};
優先隊列法:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class ListNodeCompare:public binary_function<ListNode*,ListNode*,bool> { public:bool operator()(ListNode* t1,ListNode* t2)const{if ( !t1||!t2 )return !t2;return t1->val>t2->val;} }; class Solution { public:ListNode *mergeKLists(vector<ListNode *> &lists) {// Note: The Solution object is instantiated only once and is reused by each test case.if (lists.empty())return NULL;priority_queue<ListNode*,vector<ListNode*>,ListNodeCompare> Q;for(int i=0;i<lists.size();i++)if ( lists[i]!=NULL)Q.push(lists[i]);ListNode guard(-1);ListNode* tail=&guard;while(!Q.empty()){ListNode* toAdd=Q.top();Q.pop();tail->next=toAdd;tail=tail->next;if (toAdd->next)Q.push(toAdd->next);}return guard.next;} };

轉載于:https://www.cnblogs.com/jzssuanfa/p/6861575.html

總結

以上是生活随笔為你收集整理的leecode 题解 || Merge k Sorted Lists 问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。