Merge k Sorted Lists
来源:互联网 发布:数据库原理视频下载 编辑:程序博客网 时间:2024/06/03 18:05
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
思路:这道题是归并排序的加强版。设置一个数组Min,记录每个链表的待归并的最小值,再设置一个变量minum为所有链表待归并的值的最小值。假设待归并第i个链表时,只需将链表的值与minum对比,若小于,继续向后归并。每归并n个链表后,再找出最小的minum。时间复杂度为O(MN),其中M为链表数,N为最长的链表长度。空间复杂度为O(M)。
class Solution {public: ListNode *mergeKLists(vector<ListNode *> &lists) { int len = lists.size(); if(len == 0) { return NULL; } int i,j; vector<int> Min; Min.resize(len); int empty = 0; int minum = INT_MAX; ListNode* head = new ListNode(0); ListNode* p = head; for(i=0; i<len; ++i) { if(lists[i] == NULL) { Min[i] = INT_MAX; } else { Min[i] = lists[i]->val; } if(minum > Min[i]) { minum = Min[i]; } } while(empty < len) //链表全为空 { empty = 0; for(i=0; i<len; ++i) { while(lists[i] != NULL && lists[i]->val <= minum) { ListNode* pNode = new ListNode(lists[i]->val); p->next = pNode; p = p->next; lists[i] = lists[i]->next; } if (lists[i] != NULL) { Min[i] = lists[i]->val; } else { empty++; Min[i] = INT_MAX; } } minum = INT_MAX; for(i=0; i<len; ++i) { if(minum > Min[i]) { minum = Min[i]; } } } return head->next; }};
0 0
- Merge K Sorted Lists
- Merge k Sorted Lists
- Merge k Sorted Lists
- Merge K Sorted Lists
- Merge k Sorted Lists
- Merge k Sorted Lists
- Merge k Sorted Lists
- Merge k Sorted Lists
- Merge k Sorted Lists
- Merge k Sorted Lists
- Merge k Sorted Lists
- Merge k Sorted Lists
- Merge k Sorted Lists
- Merge k Sorted Lists
- Merge K sorted Lists
- Merge k Sorted Lists
- Merge k Sorted Lists
- Merge k Sorted Lists
- Python装饰器学习
- LeetCode: Maximum Subarray
- Git中HEAD和ORIG_HEAD指针指的是什么
- js对话框总结
- 设计模式之备忘录模式
- Merge k Sorted Lists
- 链栈
- 第一章 Nginx初探
- 重温 I2C 协议
- python之深度、浅复制
- mina 的 Spring Integration
- 数据结构
- Directx 中HLSL高级着色器语言 脑补一下吧
- 如何在linux下解压缩rar格式的文件压缩包