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

总结

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

相关推荐
仰泳的熊猫1 分钟前
1148 Werewolf - Simple Version
数据结构·c++·算法·pat考试
chao1898442 分钟前
MATLAB中的多重网格算法与计算流体动力学
开发语言·算法·matlab
大工mike2 分钟前
代码随想录算法训练营第四十四天 | 99.岛屿数量 深搜 99.岛屿数量 广搜 100. 岛屿的最大面积
算法
a程序小傲8 分钟前
京东Java面试被问:ZGC的染色指针如何实现?内存屏障如何处理?
java·后端·python·面试
不穿格子的程序员18 分钟前
从零开始学算法——链表篇3:合并两个有序链表 + 两数相加
数据结构·算法·链表·dummy
vx_bisheyuange20 分钟前
基于SpringBoot的老年一站式服务平台
java·spring boot·后端·毕业设计
暴风鱼划水37 分钟前
算法题(Python)哈希表 | 2.两个数组的交集
python·算法·哈希表
fufu031142 分钟前
Linux环境下的C语言编程(四十二)
linux·c语言·算法
Tony Bai43 分钟前
Jepsen 报告震动 Go 社区:NATS JetStream 会丢失已确认写入
开发语言·后端·golang
HalvmånEver1 小时前
Linux : 基础IO(三)
linux·运维·算法