[LeetCode]Merge k Sorted Lists
2017-03-10 17:02
309 查看
好久前就看到这道题了...然而上一次想写的时候没什么思路就放弃了...最近突然有了点idea就把它肝出来了orz
题目如下:
Merge k sorted
linked lists and return it as one sorted list. Analyze and describe its complexity.
其实仔细一想,其实这道题的真谛其实就是mergesort算法的后半部分(不就是把排好序的数列合成一个数列嘛)...亏我想了那么久
我的想法是把mergeKLists函数运用递归的思想把1个存着k个排好序的数列的vector拆成2个k/2的数列的vector,然后再分别对这两个vector使用mergeKSorted函数,这样依次下去最终会得到一个只含有两个数列的vector,这样就可以使用merge函数对两个数列进行sort了。
如果不运用递归的话,每一个数列去遍历的话,复杂度可能会很大,大概会达到O(n3)但是用了递归的话,每一次merge函数的复杂度是O(n),对mergeKLists函数来说,其时间复杂度跟归并算法一样都是O(nlog n),大大减少了时间复杂度
当然,空间复杂度肯定会比没使用递归函数的空间复杂度大,这也是没办法的事orz
上代码吧
23 | Merge k Sorted Lists | 26.4% | Hard |
Merge k sorted
linked lists and return it as one sorted list. Analyze and describe its complexity.
其实仔细一想,其实这道题的真谛其实就是mergesort算法的后半部分(不就是把排好序的数列合成一个数列嘛)...亏我想了那么久
我的想法是把mergeKLists函数运用递归的思想把1个存着k个排好序的数列的vector拆成2个k/2的数列的vector,然后再分别对这两个vector使用mergeKSorted函数,这样依次下去最终会得到一个只含有两个数列的vector,这样就可以使用merge函数对两个数列进行sort了。
如果不运用递归的话,每一个数列去遍历的话,复杂度可能会很大,大概会达到O(n3)但是用了递归的话,每一次merge函数的复杂度是O(n),对mergeKLists函数来说,其时间复杂度跟归并算法一样都是O(nlog n),大大减少了时间复杂度
当然,空间复杂度肯定会比没使用递归函数的空间复杂度大,这也是没办法的事orz
上代码吧
ListNode* merge(ListNode* l1,ListNode* l2) { if(l1==NULL) { return l2; } else if(l2==NULL) { return l1; } if(l1->val <= l2->val) { l1->next = merge(l1->next, l2); return l1; } else { l2->next = merge(l1, l2->next); return l2; } } ListNode* mergeKLists(vector<ListNode*>& lists) { int size=lists.size(); if(size==0) { return NULL; } else if(size==1) { return lists[0]; } else if(size==2) { return merge(lists[0],lists[1]); } else { vector<ListNode*> list1; vector<ListNode*> list2; for(int i=0;i<size/2;i++) { list1.push_back(lists[i]); } for(int i=size/2;i<size;i++) { list2.push_back(lists[i]); } ListNode* i1=mergeKLists(list1); ListNode* i2=mergeKLists(list2); return merge(i1,i2); } }
相关文章推荐
- [LeetCode]Merge k Sorted Lists
- LeetCode 23. Merge k Sorted Lists
- LeetCode - 23. Merge k Sorted Lists
- [LeetCode][链表]Merge Two Sorted Lists
- leetcode -- Merge Two Sorted Lists -- 重点
- Merge k Sorted Lists -- LeetCode
- 【LeetCode】Merge k Sorted Lists(java)
- [LeetCode] Merge Two Sorted Lists
- [leetcode] 23.Merge k Sorted Lists
- leetcode[21]:Merge Two Sorted Lists
- LeetCode-Merge Two Sorted Lists
- LeetCode题解-21-Merge Two Sorted Lists
- LeetCode Merge Two Sorted Lists
- leetcode解题方案--023--Merge k Sorted Lists
- LeetCode题解:Merge k Sorted Lists
- leetcode Merge Two Sorted Lists
- LeetCode 21 Merge Two Sorted Lists
- LeetCode: Merge k Sorted Lists
- leetcode: Merge k Sorted Lists
- LeetCode Merge k Sorted Lists