这篇文章距离最后更新已过1281天,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
地址
https://leetcode.com/problems/merge-k-sorted-lists/description/
题目
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
思路
1.分治:很容易想到分治,就像一个二叉树从下往上跑
2.平衡树:既然想到了二叉树,那么用平衡树自然也可以。把所有的序列的值都插入到树上,然后一次性加到链表中。c++中用multiset替代。
3.优先队列/堆:这也是一个很基础的想法,每次从k个链表中取出一个最小值即可。这个方法的关键是如何在短时间内从k个链表中找出最小的那个,显然可以用优先队列or堆。
代码
/**
* 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) {
multiset<int>st;
for(auto vc:lists)
for(ListNode* it=vc;it!=NULL;it=it->next)
st.insert(it->val);
ListNode *ret = new ListNode(0),*p = ret;
for(auto it=st.begin();it!=st.end();it++)
{
p->next = new ListNode(*it);
p=p->next;
}
return ret->next;
}
};