您的位置:首页 > 其它

leetcode 23 Merge k Sorted Lists

2017-08-30 09:39 513 查看
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
typedef vector<ListNode*>::size_type sz;

// [b, e) be sure (e - b) >= 2;
ListNode* dividAndConquer(vector<ListNode*>& v, sz b, sz e) {

sz n = e - b;
sz mid = b + (e - b) / 2;
ListNode* left = NULL;
ListNode* right = NULL;

if (mid - b >= 2) left = dividAndConquer(v, b, mid);
else left = v[b];

if (e - mid >= 2) right = dividAndConquer(v, mid, e);
else right = v[mid];

ListNode dummy(INT_MIN);
ListNode* tail = &dummy;

if (left == NULL) return right;
if (right == NULL) return left;

while (left && right) {
if (left->val < right->val) {
tail->next = left;
left = left->next;
} else {
tail->next = right;
right = right->next;
}
tail = tail->next;
}
tail->next = left ? left : right;
return dummy.next;
}

ListNode* mergeKLists(vector<ListNode*>& lists) {
sz size = lists.size();
if (size == 0) return NULL;
if (size == 1) return lists[0];
return dividAndConquer(lists, 0, size);
}
}; // runtime contribution 18.70%
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: