力扣 LCR 078 合并K个升序链表

news/2025/2/8 19:30:14 标签: 算法, 数据结构, leetcode

思路 + 解题过程

分治合并

LeetCode 21题 合并两个有序链表 相似 只是在此题的基础上增加了链表的数量。
使用递归将链表数组不断分成两半,直到分成的小组都只剩下一个链表元素为止,随后开始合并链表。

复杂度

  • 时间复杂度: O(N * logK) K 为 链表(lists) 的个数,n 为所有链表的节点数之和。
  • 空间复杂度: O(logK) 递归的深度为 logK

    代码实现

    class Solution {
        public ListNode mergeKLists(ListNode[] lists) {
            if (lists.length == 0)
                return null;
    
            return merge(lists, 0, lists.length - 1);
        }
    
        public ListNode merge(ListNode[] lists, int start, int end) {
            if (start == end)
                return lists[start];
    
            int mid = (start + end) >>> 1;
            ListNode pa = merge(lists, start, mid);
            ListNode pb = merge(lists, mid + 1, end);
            return mergeSort(pa, pb);
        }
    
        public ListNode mergeSort(ListNode pa, ListNode pb) {
            ListNode target = new ListNode(0);
            ListNode temp = target;
    
            while(pa != null && pb != null){
                if(pa.val < pb.val){
                    temp.next = pa;
                    pa = pa.next;
                }else{
                    temp.next = pb;
                    pb = pb.next;
                }
                temp = temp.next;
            }
    
            temp.next = pa != null ? pa : pb; 
    
            return target.next;
        }
    }
    

            也可以通过for循环遍历的方式依次合并链表,不过时间复杂度会有所提升。


    http://www.niftyadmin.cn/n/5845231.html

    相关文章

    leetcode_双指针 541. 反转字符串 II

    541. 反转字符串 II 给定一个字符串 s 和一个整数 k&#xff0c;从字符串开头算起&#xff0c;每计数至 2k 个字符&#xff0c;就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个&#xff0c;则将剩余字符全部反转。 如果剩余字符小于 2k 但大于或等于 k 个&#xff…

    openCV函数使用(一)

    读取图像&#xff1a; 中文路径乱码问题&#xff1a; QString filepath QFileDialog::getOpenFileName(this, str); QByteArray cdata filepath.toLocal8Bit();读取灰度图像&#xff1a; imread(std::string(cdata), cv::IMREAD_GRAYSCALE);读取彩色图像&#xff1a; imre…

    Hadoop智能房屋推荐系统 爬虫1w+ 协同过滤余弦函数推荐 代码+视频教程+文档

    Hadoop智能房屋推荐系统 爬虫1w 协同过滤余弦函数推荐 带视频教程 毕设设计 课题设计 【Hadoop项目】 1. data.csv上传到hadoop集群环境 2. data.csv数据清洗 3.MapReducer数据汇总处理, 将Reducer的结果数据保存到本地Mysql数据库中 4. SpringbootEchartsMySQL 显示数据分析结…

    利用ETL工具进行数据挖掘

    ETL的基本概念 数据抽取&#xff08;Extraction&#xff09;&#xff1a;从不同源头系统中获取所需数据的步骤。比如从mysql中拿取数据就是一种简单的抽取动作&#xff0c;从API接口拿取数据也是。 数据转换&#xff08;Transformation&#xff09;&#xff1a;清洗、整合和转…

    【DeepSeek-R1训练笔记】随手记录一些训练log

    背景说明 DeepSeek系列解读请移步我的上一篇blog&#xff1a;【完整版】DeepSeek-R1大模型学习笔记&#xff08;架构、训练、Infra&#xff09;代码仓库【科大的大四老哥太太太太太值得倾佩了】&#xff1a;https://github.com/Unakar/Logic-RLDeepSeek-R1-Zero复现文档&#…

    【leetcode100】岛屿的周长

    1、题目描述 给定一个 row x col 的二维网格地图 grid &#xff0c;其中&#xff1a;grid[i][j] 1 表示陆地&#xff0c; grid[i][j] 0 表示水域。 网格中的格子 水平和垂直 方向相连&#xff08;对角线方向不相连&#xff09;。整个网格被水完全包围&#xff0c;但其中恰好…

    Docker Desktop安装kubernetes时一直在Starting:Kubernetes failed to start

    原因&#xff1a;由于墙的问题&#xff0c;导致拉取国外的K8s镜像失败 解决&#xff1a; 下载 k8s-for-docker-desktop 选中自己的kubernetes 版本 下载zip包 PowerShell运行load_images.ps1文件 重启docker kubernetes运行成功

    【蓝桥杯嵌入式】4_key:单击+长按+双击

    全部代码网盘自取 链接&#xff1a;https://pan.baidu.com/s/1PX2NCQxnADxYBQx5CsOgPA?pwd3ii2 提取码&#xff1a;3ii2 1、电路图 将4个按键的引脚设置为input&#xff0c;并将初始状态设置为Pull-up&#xff08;上拉输入&#xff09; 为解决按键抖动的问题&#xff0c;我们…