美文网首页
23. Merge k Sorted Lists

23. Merge k Sorted Lists

作者: weego | 来源:发表于2018-04-07 09:50 被阅读0次

Description

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

Solution

可以借助于21. Merge Two Sorted Lists,拥有了合并两个有序单链表的能力,合并k个有序链表自然手到擒来。
二分法递归调用,时间复杂度O(nlog(k))

class Solution {
public:
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        return this->mergeKSortedLists(lists, 0, lists.size() - 1);
    }

    ListNode* mergeKSortedLists(vector<ListNode*>& lists, int begin, int end) {
        if (lists.size() == 0 || begin > end) {
            return NULL;
        } else if (begin == end) {
            return lists[begin];
        } else if (end == begin + 1) {
            return this->mergeTwoLists(lists[begin], lists[end]);
        }
        int mid = (begin + end)/2;
        auto l1 = this->mergeKSortedLists(lists, begin, mid);
        auto l2 = this->mergeKSortedLists(lists, mid + 1, end);
        return this->mergeTwoLists(l1, l2);
    }

    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        auto p = l1, q = l2;
        auto dummy = new ListNode(-1), pNode = dummy;
        while (p || q) {
            if (p == NULL) {
                pNode->next = q;
                return dummy->next;
            }
            if (q == NULL) {
                pNode->next = p;
                return dummy->next;
            }
            if (p->val < q->val) {
                pNode->next = p;
                p = p ->next;
            } else {
                pNode->next = q;
                q = q->next;
            }
            pNode = pNode->next;
        }
        return dummy->next;
    }
};

相关文章

网友评论

      本文标题:23. Merge k Sorted Lists

      本文链接:https://www.haomeiwen.com/subject/cawehftx.html