zoukankan      html  css  js  c++  java
  • 【LeetCode 23】合并K个排序链表

    题目链接

    【题解】

    会归并排序吧? 就把这K个链表当成是K个数字就好。 然后做归并排序。 因为归并排序的时候本来就会有这么一个过程。 [l..mid]和[mid+1..r]这两段区间都是有序的了已经。 然后再把他们俩合并起来。 合并起来之后把这个链表直接放在这个区间的最左边那个位置就好 上一级的合并要用的时候就直接取这个区间最左边那个链表。 有个人关于时间复杂度的证明说的挺好的贴一下 ![](https://img2018.cnblogs.com/blog/1251265/201911/1251265-20191109164330161-1268340088.png)

    【代码】

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        
        void merge(vector<ListNode*> &lists,int l,int r){
            if (l>=r) return;
            int mid = (l+r)>>1;
            merge(lists,l,mid);merge(lists,mid+1,r);
            ListNode *temp = (ListNode *) malloc(sizeof(ListNode));
            temp->next =NULL;
            ListNode *p = temp;
            ListNode *p1 = lists[l],*p2 = lists[mid+1];
            while(p1 && p2){
                if (p1->val<p2->val){
                    p->next = p1;
                    p1 = p1->next;
                }else{
                    p->next = p2;
                    p2 = p2->next;
                }
                p = p->next;
            }
            if (p2) p1 = p2;
            while (p1){
                p->next = p1;
                p = p->next;
                p1 = p1->next;
            }
            lists[l] = temp->next;
        }
        
        ListNode* mergeKLists(vector<ListNode*>& lists) {
            if (lists.empty()) return NULL;
            int n = lists.size();
            merge(lists,0,n-1);
            return lists[0];
        }
    };
    
  • 相关阅读:
    HBase性能调优
    HBase原理和设计
    HBase 架构脑图
    Hadoop
    Hadoop YARN架构设计要点
    Hadoop-YARN
    Hadoop-HDFS
    TCP传输
    分布式系统常见的事务处理机制
    Zookeeper Client简介
  • 原文地址:https://www.cnblogs.com/AWCXV/p/11826669.html
Copyright © 2011-2022 走看看