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;
    }
}

总结

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

相关推荐
布列瑟农的星空7 分钟前
大话设计模式——关注点分离原则下的事件处理
前端·后端·架构
躲着人群24 分钟前
次短路&&P2865 [USACO06NOV] Roadblocks G题解
c语言·数据结构·c++·算法·dijkstra·次短路
心动啊1211 小时前
支持向量机
算法·机器学习·支持向量机
现在就干1 小时前
Spring事务基础:你在入门时踩过的所有坑
java·后端
该用户已不存在2 小时前
Gradle vs. Maven,Java 构建工具该用哪个?
java·后端·maven
小欣加油2 小时前
leetcode 1493 删掉一个元素以后全为1的最长子数组
c++·算法·leetcode
JohnYan2 小时前
Bun技术评估 - 23 Glob
javascript·后端·bun
二闹2 小时前
聊天怕被老板发现?摩斯密码来帮你
后端·python
用户298698530142 小时前
# C#:删除 Word 中的页眉或页脚
后端
David爱编程2 小时前
happens-before 规则详解:JMM 中的有序性保障
java·后端