【快手手撕】合并区间

求解代码

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没有后续区间对比,遍历结束后不会被自动加入,所以需要手动补充。

相关推荐
认真的酒窝1 小时前
自己动手开发编译器(十一)语义分析
java·开发语言
wbs_scy3 小时前
Linux C++ 高并发编程:线程池全链路深度解析,从原理到手撕实现
java·开发语言
JAVA面经实录9173 小时前
Linux 常用命令完整知识体系
java·linux·开发语言·汇编
Full Stack Developme4 小时前
Java LRU 与 LFU 算法及应用
java·开发语言·算法
机智的张尼玛6 小时前
我基于 Kotlin Multiplatform 实现了一套跨平台的弱网离线同步引擎
android·开源·kotlin
程序员老油条6 小时前
WSL2 + Docker Desktop:Windows 下的完美 Java 开发环境
java·windows·docker·wsl2
shushangyun_7 小时前
2026智能采购商城系统选型指南:如何引领企业数字化采购升级
java·大数据·数据库·人工智能·机器学习
她说..7 小时前
Java 默认值设置方式
java·开发语言·后端·springboot
学渣超8 小时前
记一次分布式事务数据不一致的排查之旅:从超时到索引,层层剥茧
java·后端·架构
掉鱼的猫8 小时前
Agent Harness 实战指南:构建生产级 AI Agent 的"马具"框架
java·llm·aigc