Leetcode:23. Merge k Sorted Lists (week 10)
来源:互联网 发布:淘宝怎么分期付款花呗 编辑:程序博客网 时间:2024/09/21 09:19
Description
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
解题思路
利用分治的思想把合并k个链表分成两个合并k/2个链表的任务,一直划分,知道任务中只剩一个链表或者两个链表。可以很简单的用递归来实现。因此算法复杂度为T(k) = 2T(k/2) + O(nk),算法复杂度为O(nklogk)
代码
/** * 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) { int len = lists.size(); if (len == 0) return NULL; if (len == 1) return lists[0]; return merge(lists,0, lists.size()-1); } ListNode* merge(vector<ListNode*>& lists,int start,int end) { if (start == end) return lists[start]; else if (start+1 == end) return merge2(lists[start], lists[end]); ListNode* l1 = merge(lists,start, (start+end)/2); ListNode* l2 = merge(lists,(start+end)/2+1,end); return merge2(l1,l2); } ListNode* merge2(ListNode* l1, ListNode* l2) { if(l1==l2) return l1; if (!l1) return l2; if (!l2) return l1; if (l1->val > l2->val) return merge2(l2,l1); ListNode* newl2= new ListNode(0); newl2->next = l2; ListNode * p1 = l1; while (p1->next && newl2->next) { if (p1->next->val < newl2->next->val) { p1 = p1->next; } else{ ListNode * temp = p1->next; p1->next = newl2->next; newl2->next = newl2->next->next; p1->next->next = temp; p1= p1->next; } } if (!p1->next) p1->next = newl2->next; delete newl2; return l1; }};
阅读全文
0 0
- Leetcode:23. Merge k Sorted Lists (week 10)
- leetcode 23. LeetCode Merge k Sorted Lists
- [LeetCode]23.Merge k Sorted Lists
- LeetCode --- 23. Merge k Sorted Lists
- LeetCode 23.Merge k Sorted Lists
- [Leetcode] 23. Merge k Sorted Lists
- 【LeetCode】23.Merge k Sorted Lists
- [leetcode] 23.Merge k Sorted Lists
- Leetcode-23.Merge k Sorted Lists
- [Leetcode]23. Merge k Sorted Lists @python
- leetcode 23. Merge k Sorted Lists
- leetcode 23. Merge k Sorted Lists
- leetcode 23. Merge k Sorted Lists
- LeetCode 23. Merge k Sorted Lists
- [leetcode] 23. Merge k Sorted Lists
- LeetCode 23. Merge k Sorted Lists
- LeetCode 23. Merge k Sorted Lists
- LeetCode-23.Merge k Sorted Lists
- CACHE
- JAVA dbutils resulthandler 的几个分类
- ArrayAdapter
- LeetCode解题-#3-Longest Substring Without Repeating Characters
- 并发(一):java并发概念以及Volatile可见性,重排序
- Leetcode:23. Merge k Sorted Lists (week 10)
- STL — Map和Set的简易实现
- Bootstrap模态框
- do-while语句
- SSM-CRUD-修改
- C++的指针学习
- 【Python学习之路】My Third journey
- 定时刷新界面
- 已知不等式:1!+2!+···+m!<n,请计算并输出满足该不等式的m的整数解。