23. Merge k Sorted Lists
来源:互联网 发布:如何开淘宝话费充值店 编辑:程序博客网 时间:2024/04/27 17:40
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
解法一:依次合并两个,直至把所有的合并完。
ListNode* mergeKLists(vector<ListNode*>& lists) { int n=lists.size(); if(n==0) return NULL; while(lists.size()>=2) { lists.push_back(merge2lists(lists[0],lists[1])); lists.erase(lists.begin()); lists.erase(lists.begin()); } return lists[0]; } ListNode* merge2lists(ListNode* a,ListNode* b)//合并2个 { if(a==NULL) return b; if(b==NULL) return a; ListNode* l=new ListNode(0),*p; p=l; while(a&&b) { if(a->val<b->val) { l->next=a; a=a->next; } else { l->next=b; b=b->next; } l=l->next; } if(a) l->next=a; if(b) l->next=b; return p->next; }解法二:
运用优先队列,每次找到的都是当前所有节点中的最小节点。
struct com{ bool operator()( ListNode* &t1, ListNode* &t2)//优先队列比较函数的重载 { return t1->val > t2->val; }};
ListNode* mergeKLists(vector<ListNode*>& lists) { priority_queue<ListNode*,vector<ListNode*>,com> pq; int n=lists.size(); for(int i=0;i<n;i++) if(lists[i]) pq.push(lists[i]); ListNode* l=new ListNode(0),*p=l; while(pq.size()>0) { l->next=pq.top(); pq.pop(); l=l->next; if(l->next) pq.push(l->next); } return p->next; }
0 0
- 23. Merge k Sorted Lists
- 23.Merge K Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23.Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23.Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- SVM介绍
- JPA学习(五)
- 阿里监控
- Java 浮点数格式化
- php strtotime函数的巧用
- 23. Merge k Sorted Lists
- Ubuntu16.04下Apache2的操作
- Fast convnets using group-wise brain damage
- 改变Activuty的透明度
- http协议
- 最大子矩阵和
- git 常见问题
- DPM(Deformable Parts Model)--原理
- 只有不停奔跑