LeetCode算法学习之合并区间

代码完整展示如下:

java 复制代码
class Solution {
    public int[][] merge(int[][] intervals) {
        if (intervals.length <= 1) {
            return intervals;
        }

        // 按区间起始位置排序
        Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));
        
        List<int[]> result = new ArrayList<>();
        int[] currentInterval = intervals[0];
        result.add(currentInterval);
        
        for (int[] interval : intervals) {
            int currentEnd = currentInterval[1];
            int nextStart = interval[0];
            int nextEnd = interval[1];
            
            if (currentEnd >= nextStart) {
                // 有重叠,合并区间
                currentInterval[1] = Math.max(currentEnd, nextEnd);
            } else {
                // 无重叠,添加新区间
                currentInterval = interval;
                result.add(currentInterval);
            }
        }
        
        return result.toArray(new int[result.size()][]);
    }
}

首先对输入数组进行一个长度判定,若数组只有一个元素或者一个元素都没有,则直接返回输入数组即可,然后需要对二维数组中的一维数组进行排序,因为题目给定的二维数组内部没有说明是有序的,为了后边的操作正常,需要提前对数组进行排序,这里排序使用的是Arrays工具类中的sort方法,并且添加了一个自定义比较规则,(a, b) -> Integer.compare(a[0], b[0]),a,b代表的是二维数组中的两个一维数组,我们需要根据一维数组的首元素进行比较,所以后边是a[0], b[0],进行比较,然后创建一个list集合来存储结果集,根据list特性可以获取长度,为后边返回二维数组的长度提供依据,将原数组的首元素先存入list集合中,后续如果有重叠部分就修改这个元素的值,在for循环中处理真正的合并逻辑,先定义三个变量,currentEnd:表示当前处理区间的尾元素,nextStart:表示下一个区间的首元素,nextEnd:表示下一个区间的尾元素,如果currentEnd >= nextStart说明有重叠,此时要修改当前区间的尾元素为Math.max(currentEnd, nextEnd),即currentEnd, nextEnd两者中的最大值,如果没有重叠,就把当前遍历到的区间更新为currentInterval正在处理区间,并添加到结果集中,最后返回result.toArray(new int[result.size()][]);

相关推荐
CoderCodingNo1 小时前
【CSP】CSP-XL 2025辽宁复赛真题-第四题, 购物(buy)
算法
复业思维202401082 小时前
Altium Designer (24.2.2)中更改库以及保持器件参数不变
笔记·学习·硬件工程
巧克力味的桃子2 小时前
进制转换3 学习笔记
笔记·学习
mjhcsp2 小时前
P14795 [JOI 2026 二次预选] 分班 / Class Division
数据结构·c++·算法
闻缺陷则喜何志丹2 小时前
【计算几何 最短路 动态规划】P1354 房间最短路问题
数学·算法·动态规划·最短路·计算几何·洛谷
圣保罗的大教堂2 小时前
leetcode 840. 矩阵中的幻方 中等
leetcode
Purple Coder2 小时前
人工智能学习路线
学习
girl-07262 小时前
2025.12.29实验题目分析总结
数据结构·算法
小帅学编程2 小时前
Spring(侧重注解开发)
java·学习·spring
点云SLAM2 小时前
Truncated Least Squares(TLS 截断最小二乘)算法原理
算法·slam·位姿估计·数值优化·点云配准·非凸全局优化·截断最小二乘法