【LeetCode算法练习(C++)】Merge k Sorted Lists

来源:互联网 发布:matlab创建三维数组 编辑:程序博客网 时间:2024/05/17 04:12

题目:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

链接:Merge k Sorted Lists
解法:递归实现归并,利用merge Two Lists,每次合并两个序列。时间O(nlogn)

class Solution {public:    ListNode* mergeKLists(vector<ListNode*>& lists) {        if (lists.size() == 0) return NULL;        else return VmergeKLists(lists)[0];    }    vector<ListNode*> VmergeKLists(vector<ListNode*>& lists) {        vector<ListNode*> res;        if (lists.size() == 1) return lists;        else if (lists.size() == 2) {            res.push_back(mergeTwoLists(lists[0], lists[1]));            return res;        }        else {            vector<ListNode*> vl;            for (int i = 1; i < lists.size(); i += 2) {                vl.push_back(mergeTwoLists(lists[i - 1], lists[i]));            }            if (lists.size() % 2) vl.push_back(lists[lists.size() - 1]);            return VmergeKLists(vl);        }    }    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {        ListNode *head = new ListNode(0);        head->next = NULL;        ListNode *p = head;        while (l1 || l2) {            ListNode *tmp = new ListNode(0);            tmp->next = NULL;            if (!l1 && l2) {                tmp->val = l2->val;                l2 = l2->next;            } else if (!l2 && l1) {                tmp->val = l1->val;                l1 = l1->next;            } else if (l1->val > l2->val) {                tmp->val = l2->val;                l2 = l2->next;            } else {                tmp->val = l1->val;                l1 = l1->next;            }            p->next = tmp;            p = p->next;        }        p = head;        head = head->next;        p->next = NULL;        delete(p);        return head;    }};

Runtime: 32 ms

原创粉丝点击