leetcode 23 Merge k Sorted Lists

来源:互联网 发布:华为交换机 端口详解 编辑:程序博客网 时间:2024/06/07 10:15

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%
原创粉丝点击