LeetCode第23题合并 K 个升序链表

继续打卡算法题,今天学习的是LeetCode的第23题合并K个升序链表,这道题目是道hard题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些帮助。

哈哈,今天挑战第一道hard题,之前已经学习过合并两个有序链表 ,今天这题是它的升级plus版本

分析一波题目

因为两个有序链表我们可以合并,那么合并k个我们可以采用分而治之的思想解决。

第一次合并k个中的两个,然后将合并的结果和k个中的下一个进行合并,依次类推。

编码解决

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeKLists(ListNode[] lists) {

        if(lists == null || lists.length == 0) {
            return null;
        }

        if( lists.length == 1) {
            return lists[0];
        }

        //递归 每次合并两个数组, 最后剩下0个链表
        ListNode list= lists[0];
        for(int i= 1; i< lists.length; i++) {
            list = merge2Lists(list, lists[i]);
        }    
        return list;

    }

    //递归 每次合并两个数组, 最后剩下0个链表
    public ListNode merge2Lists(ListNode list1 , ListNode list2) {

            //list1已经到到尾部 递归结束
            if(list1 == null ) {
                return list2;
            }
            //list2已经到到尾部
            if(list2 == null) {
                return list1;
            }

            if(list1.val < list2.val) {
                //递归
                list1.next = merge2Lists(list1.next, list2);
                return list1;
            }
            //递归
            list2.next = merge2Lists(list1, list2.next);
            return list2;
    }
}

总结

分而治之思想也是一个常用解题技巧,如果指定子问题可以求解,原问题分解成多个子问题求解,再合并结果。

相关推荐
有梦不弃6 小时前
模块化单体架构设计方案:DDD + 六边形架构落地实践
后端·架构
阿坤带你走近大数据7 小时前
基金面试准备1
面试·职场和发展
烬羽8 小时前
React Router 嵌套路由:一个 `Outlet` 引发的布局思考
react.js·面试·前端框架
小程故事多_808 小时前
从A2C、TRPO、PPO到GRPO,强化学习策略梯度算法完整演进与大模型落地实战解析
人工智能·算法
2601_9561219710 小时前
二分算法(知识点+题目)
c++·算法
江南十四行11 小时前
Spring框架核心(上)——IoC控制反转与DI依赖注入详解
java·后端·spring
IT_陈寒11 小时前
Redis缓存击穿把我坑惨了,原来这样设过期时间才靠谱
前端·人工智能·后端
妙码生花12 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(五十二):管理员权限检查中间件,AI 随意放行预闯大祸
前端·后端·go
创安电气研究所12 小时前
用 Node.js 将变频器运行数据接入 MQTT
后端
董员外12 小时前
RAG 系统进化论(八):Agentic RAG(智能体式 RAG),从回答问题到完成任务
人工智能·后端·设计模式