【快手手撕】合并区间

求解代码

java 复制代码
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {

        ArrayList<Interval> ans = new ArrayList<>();

        // 边界处理:入参为null或空集合,直接返回空
        if (intervals == null || intervals.size() == 0) {
            return ans; 
        }

        // 按区间的start值升序排序
        Collections.sort(intervals, (a, b) -> (a.start - b.start));

        // 初始化【当前合并区间】为排序后的第一个区间
        Interval current = intervals.get(0);

        
        for (int i = 1; i < intervals.size(); i++) {
            // 取出当前遍历到的待对比区间
            Interval temp = intervals.get(i);
            // 重叠判断:待对比区间的start ≤ 当前合并区间的end → 两个区间重叠,需要合并
            if (temp.start <= current.end) {
                // 更新当前合并区间的end为两者end的最大值
                current.end = Math.max(current.end, temp.end);
            } else {
                // 将当前合并完成的区间加入结果集合
                ans.add(current);
                // 更新「当前合并区间」为当前遍历到的新区间,继续后续合并
                current = temp;
            }
        }

        // 手动将最后一个未加入的「当前合并区间」加入结果
        ans.add(current);

        // 返回最终合并结果
        return ans;
    }

小贴士

遍历中只有遇到非重叠区间时,才会把 上一个 current加入结果,而最后一个current没有后续区间对比,遍历结束后不会被自动加入,所以需要手动补充。

相关推荐
萧瑟余晖14 分钟前
Spring Batch核心模型与快速上手详解
java·spring·batch
缓慢更新38 分钟前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
三少爷的鞋2 小时前
Java 线程自上而下,Kotlin 协程自下而上
android
LMT流氓兔2 小时前
第五单元——第十六课:给书店助手加上网页界面
java·开发语言·jvm·人工智能·oracle·langchain·1024程序员节
好的佩奇3 小时前
Dart 之增强枚举
android·flutter·dart
wangbing11253 小时前
平台介绍-modbus设备调试
java
梦影_4 小时前
MySQL进阶教程(五)—— SQL调优(下)
android·大数据·数据库·后端·sql·mysql·database
西索斯coding4 小时前
gpt-image-2.5-sunburst 和 gemini-3.1-flash-image 差多少?60 组项目素材的成功成本评测框架
java·linux·gpt·ai
wuminyu4 小时前
Java字节码学习总结:字节码如何加载、解析和执行
java·linux·c语言·jvm·c++
Flynn Liang5 小时前
大模型怎么自己调函数?Spring AI 2.0 Tool Calling 自动循环原理 + 完整时序图
java·人工智能·spring·agent·函数调用·springai·toolcalling