zoukankan      html  css  js  c++  java
  • 23. 合并K个排序链表 分治

    这种k个相同的子问题,可以两两分治,总的运算次数为logk

    关键部分

    int dis=1;
        int len=lists.size();
        while(dis<=len)
        {
            for(int i=0;i<len-dis;i=i+dis*2){
                lists[i]=solve(lists[i],lists[i+dis]);
            }
            dis*=2;
        }
            return lists[0];

    (每次运算后剩下的子问题个数为 x/2 向上取整,这样每次/2,最后问题一定会解决)

    注意判断空数组

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* mergeKLists(vector<ListNode*>& lists) {
        ListNode* ret=NULL;
        if(lists.empty())
            return ret;
        int dis=1;
        int len=lists.size();
        while(dis<=len)
        {
            for(int i=0;i<len-dis;i=i+dis*2){
                lists[i]=solve(lists[i],lists[i+dis]);
            }
            dis*=2;
        }
            return lists[0];
        }
        
        ListNode* solve(ListNode* l1,ListNode*l2)
        {
            ListNode* tp=new ListNode(0);
            ListNode* head=tp;
            while(l1!=NULL&&l2!=NULL)
            {
                if(l1->val<=l2->val)
                {
                    tp->next=l1;
                    tp=tp->next;
                    l1=l1->next;
                }
                else{
                    tp->next=l2;
                    tp=tp->next;
                    l2=l2->next;
                }
            }
            if (l1==NULL)
                tp->next=l2;
            else
                tp->next=l1;
            return head->next;
        }
    };
  • 相关阅读:
    HDFS详解(3)——HDFS文件结构
    HDFS详解(1)
    MapReduce工作机制
    Hadoop体系结构
    Hadoop 项目及结构
    (转)Hadoop生态系统
    Hadoop配置参数
    HDFS详解(2)——HDFS中的读写数据流
    Yarn(MapReduce V2)
    与或非实习day02
  • 原文地址:https://www.cnblogs.com/lqerio/p/11762278.html
Copyright © 2011-2022 走看看