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()][]);

相关推荐
科研前沿1 分钟前
镜像孪生VS视频孪生核心技术产品核心优势
大数据·人工智能·算法·重构·空间计算
水蓝烟雨2 分钟前
1931. 用三种不同颜色为网格涂色
算法·leetcode
北山有鸟17 分钟前
修改源码法和插件法
嵌入式硬件·学习
richxu2025100119 分钟前
嵌入式学习之路->stm32篇->(14)通用定时器(上)
stm32·单片机·嵌入式硬件·学习
晨曦夜月28 分钟前
map与unordered_map区别
算法·哈希算法
qeen8742 分钟前
【数据结构】建堆的时间复杂度讨论与TOP-K问题
c语言·数据结构·c++·学习·
图码1 小时前
如何用多种方法判断字符串是否为回文?
开发语言·数据结构·c++·算法·阿里云·线性回归·数字雕刻
handler011 小时前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
minglie11 小时前
实数列的常用递推模式
算法
lizhihai_991 小时前
股市学习心得-六张分时保命图
大数据·人工智能·学习