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);
        }
  • 相关阅读:
    ubuntu下内核源码树的建立
    删除ubuntu旧版本内核
    设置ubuntu12.04桌面版开机进入命令行模式
    MFC学习笔记(一)向模态对话框传递数据
    redis 映射数据结构粗略
    redis入门
    mybatis总结
    mybatis--mapper配置总结
    mybatis-初步使用
    maven-plugins说明
  • 原文地址:https://www.cnblogs.com/coderht/p/5387728.html
Copyright © 2011-2022 走看看