zoukankan      html  css  js  c++  java
  • Merge k Sorted Lists

    是分治思想。设k为链表个数,每个链表含有n个元素。则有T(k)=2T(k/2)+nk;由递归树可以求出时间复杂度为O(nklogk)。代码如下:

     ListNode *mergetwo(ListNode *l1, ListNode *l2) 
     {
           
            if(l1==NULL)return l2;
            if(l2==NULL)return l1;
            ListNode* node1=l1;
            ListNode* node2=l2;
            ListNode* cur=NULL;
            ListNode* result=NULL;
            while(node1&&node2)
            {
                if(result==NULL)
                {
                    if(node1->val<node2->val)
                    {
                        result=cur=node1;
                        node1=node1->next;
                        cur->next=NULL;
                    }
                    else
                    {
                        result=cur=node2;
                        
                        node2=node2->next;
                        cur->next=NULL;
                        
                    }
                }
                else
                {
                    if(node1->val<node2->val)
                    {
                        cur->next=node1;
                        cur=cur->next;
                        
                        node1=node1->next;
                        cur->next=NULL;
                    }
                    else
                    {
                        cur->next=node2;
                        cur=cur->next;
                       
                        node2=node2->next;
                         cur->next=NULL;
                        
                    }
                }
            }
            if(node1) cur->next=node1;
            else cur->next=node2;
            return result;
            
        }
    
        ListNode* mergeKLists(vector<ListNode*>& lists) {
            if(lists.size()<1)return NULL;
            if(lists.size()==1)return lists[0];
            int j=lists.size();
            int n=(j+1)/2;
            vector<ListNode*> node1(lists.begin(),lists.begin()+n);
            vector<ListNode*> node2(lists.begin()+n,lists.end());
            ListNode* l1 = mergeKLists(node1) ;  
            ListNode* l2 = mergeKLists(node2) ; 
           
            return mergetwo(l1,l2);
        }
  • 相关阅读:
    实例事件
    实例方法
    Extends Option 扩展选项
    Watch 选项 监控数据
    methods方法选项
    computed Option 计算选项
    propsData Option 全局扩展的数据传递
    component 父子组件
    component-04 动态绑定组件
    component 全局局部组件
  • 原文地址:https://www.cnblogs.com/coderht/p/5387728.html
Copyright © 2011-2022 走看看