zoukankan      html  css  js  c++  java
  • leetCode 23

    1.题目描述

    1. 合并K个排序链表
      合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

    示例:

    输入:
    [
    1->4->5,
    1->3->4,
    2->6
    ]
    输出: 1->1->2->3->4->4->5->6

    --

    2.思路

    思路:分而治之
    有点像归并排序
    代码如下

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* merge(ListNode *l1 , ListNode * l2) {
            auto dummy = new ListNode(-1);
            auto r = dummy;
            while(l1 && l2 ) {
                if(l1 -> val < l2 -> val) {
                    r->next = l1;
                    l1 = l1 -> next;
                }
                else {
                    r -> next = l2;
                    l2 = l2 -> next;
                }
                r = r -> next;
            }
            r -> next = nullptr;
            if(l1) r->next = l1;
            if(l2) r -> next = l2;
            return dummy -> next;
        }
        ListNode* mergeKLists(vector<ListNode*>& lists) {
            if(lists.size() == 0) return nullptr;
            if(lists.size() == 1) return lists[0];
            int mid = lists.size() / 2;
            vector<ListNode*> l1(lists.begin(),lists.begin()+mid);
            vector<ListNode*> l2(lists.begin()+mid,lists.end());
            //for(auto ele : l1) cout<<ele->val<<",";
           // cout<<"-----------"<<endl;
            //for(auto ele : l2) cout<<ele->val<<",";
            ListNode *ml1 = mergeKLists(l1);
            ListNode *ml2 = mergeKLists(l2);
            return merge(ml1,ml2);
        }
    };
    

    合并一个两个链表O(n)
    分而治之要O(logn)
    所以时间复杂度为O(nlogn)

  • 相关阅读:
    c# DataTable 转为 List 类型
    .net配置文件读取
    文件重命名(递归)
    sharepoint 网站创建
    Sharepoint添加顶部导航菜单
    .net sharepoint文档库操作
    c#下载共享文件夹下的文件并记录错误日志
    JS命名空间实例
    js时间处理函数
    模块
  • 原文地址:https://www.cnblogs.com/custoyth/p/13345903.html
Copyright © 2011-2022 走看看