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(a0, b0),a,b代表的是二维数组中的两个一维数组,我们需要根据一维数组的首元素进行比较,所以后边是a0, b0,进行比较,然后创建一个list集合来存储结果集,根据list特性可以获取长度,为后边返回二维数组的长度提供依据,将原数组的首元素先存入list集合中,后续如果有重叠部分就修改这个元素的值,在for循环中处理真正的合并逻辑,先定义三个变量,currentEnd:表示当前处理区间的尾元素,nextStart:表示下一个区间的首元素,nextEnd:表示下一个区间的尾元素,如果currentEnd >= nextStart说明有重叠,此时要修改当前区间的尾元素为Math.max(currentEnd, nextEnd),即currentEnd, nextEnd两者中的最大值,如果没有重叠,就把当前遍历到的区间更新为currentInterval正在处理区间,并添加到结果集中,最后返回result.toArray(new intresult.size()\[\]);

相关推荐
小程故事多_804 小时前
从A2C、TRPO、PPO到GRPO,强化学习策略梯度算法完整演进与大模型落地实战解析
人工智能·算法
2601_956121975 小时前
二分算法(知识点+题目)
c++·算法
咸鱼翻身小阿橙8 小时前
现在这个四通道出现的问题
学习
AndrewHZ8 小时前
【LLM技术全景】阶段总结:技术原理篇核心知识回顾
人工智能·深度学习·算法·语言模型·大模型·llm·芯片开发
小星星闪亮登场9 小时前
2026萌新联赛第三场-- (郑州轻工业大学)
数据结构·c++·经验分享·算法·贪心算法·排序算法·深度优先
云贝教育-郑老师9 小时前
OceanBase 是如何搞定海量数据分片(Sharding)的?
学习·oceanbase·dba
冻柠檬飞冰走茶9 小时前
PTA基础编程题目集 7-8超速判断(C++语言实现)
开发语言·数据结构·c++·算法
编程圈子10 小时前
电机驱动开发学习23. 保护体系与故障状态机
驱动开发·学习
玖玥拾10 小时前
LeetCode 88 合并两个有序数组
算法·leetcode
数据皮皮侠AI10 小时前
上市公司数字供应链金融指数(2010-2024)
大数据·人工智能·算法