您的位置:首页 > 其它

[LeetCode 题解]: Merge k Sorted Lists

2014-07-28 20:44 381 查看
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

题意:对k个有序的链表进行归并排序。并分析其复杂度。

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* merge(ListNode* left, ListNode* right){   //归并操作
if(left==NULL) return right;
if(right==NULL) return left;
ListNode *ans =new ListNode(0);
if(left->val <= right->val){
ans=left;
left = left->next;
}else{
ans=right;
right=right->next;
}
ans->next = merge(left,right);
return ans;
}
ListNode* mergesort(vector<ListNode *> &lists,int left,int right){  //devide && conquer
if(left>right){
return NULL;
}if(left==right){
return lists[left];
}else{
int middle = (left+right)>>1;
ListNode *lleft = mergesort(lists,left,middle);
ListNode *lright = mergesort(lists,middle+1,right);
return merge(lleft,lright);
}

}
ListNode *mergeKLists(vector<ListNode *> &lists) {
int left =0,right =lists.size()-1;
int middle= (left+right)>>1;
ListNode *lleft = mergesort(lists,left,middle);
ListNode *lright = mergesort(lists,middle+1,right);
return merge(lleft,lright);
}
};


时间复杂度: O(n*logn)

空间复杂度: O(1)

至于具体的量化分析呢,呵呵。。。数学推导了

转载请注明出处: http://www.cnblogs.com/double-win/ 谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: