随笔 - 176  文章 - 0  评论 - 18  阅读 - 11万

leetcode第22题--Merge k Sorted Lists

problem:Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

先合并两个list,再根据归并排序的方法递归合并。假设总共有k个list,每个list的最大长度是n,那么运行时间满足递推式T(k) = 2T(k/2)+O(n*k)。根据主定理,可以算出算法的总复杂度是O(nklogk)。空间复杂度的话是递归栈的大小O(logk)。


复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) // 将两个list  merge
{
    if(!l1)
        return l2;
    if(!l2)
        return l1;
    ListNode *tmp = new ListNode(0);
    ListNode *ans = tmp;
    while(l1 && l2)
    {
        if(l1 -> val < l2 -> val)
        {
            ans -> next = l1;
            ans = ans -> next;
            l1 = l1 -> next;
        }
        else
        {
            ans -> next = l2;
            ans = ans -> next;
            l2 = l2 -> next;
        }
    }
    if (l1)
    {
        while(l1)
        {
            ans -> next = l1;
            ans = ans -> next;
            l1 = l1 -> next;
        }
    }

    if (l2)
    {
        while(l2)
        {
            ans -> next = l2;
            ans = ans -> next;
            l2 = l2 -> next;
        }
    }
    ans = tmp;
    delete ans;
    return tmp -> next;
}
ListNode *reMerge(vector<ListNode *> &lists, int l, int r)
{
    if(l < r) // 类似于归并排序,把一大块分成l和r两块,然后将两个合并(l和r也还可以再分)
    {
        int m = (l + r)/2;
        return mergeTwoLists(reMerge(lists, l, m), reMerge(lists, m + 1, r));
    }
    else
        return lists[l];
}
ListNode *mergeKLists(vector<ListNode *> &lists)
{
    ListNode *ans = NULL;// 用NULL 而不是利用 new ListNode(0)
    if (lists.size() == 0)
        return ans;
    return reMerge(lists, 0, lists.size() - 1);
}
};
复制代码

 

 
posted on   higerzhang  阅读(157)  评论(0编辑  收藏  举报
编辑推荐:
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 基于DeepSeek R1 满血版大模型的个人知识库,回答都源自对你专属文件的深度学习。
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· Tinyfox 简易教程-1:Hello World!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示