力扣热门100题之合并区间

这题核心就两步:先按起点排序 → 再逐个合并重叠区间

思路

  1. 按每个区间的左端点从小到大排序

  2. 用一个列表保存结果

  3. 遍历每个区间:

◦ 如果结果为空,直接加入

◦ 否则看当前区间起点 ≤ 最后一个区间终点 → 重叠,合并

◦ 不重叠就直接加入

完整代码实现:

java 复制代码
class Solution {
    public int[][] merge(int[][] intervals) {
        // 边界:空数组
        if (intervals == null || intervals.length == 0) {
            return new int[0][];
        }

        // 1. 按区间的起点(第一个数)升序排序
        Arrays.sort(intervals, (a, b) -> a[0] - b[0]);

        // 保存最终合并后的区间
        List<int[]> res = new ArrayList<>();
        // 先把第一个区间加进去
        res.add(intervals[0]);

         // 2. 从第二个区间开始遍历
         for(int i = 1;i<intervals.length;i++){
            // 当前要处理的区间
            int[] curr = intervals[i];
            // 结果中最后一个已经合并的区间
            int[] last = res.get(res.size() - 1);

            // 当前区间起点 <= 最后区间终点 → 重叠,需要合并
            if(curr[0] <= last[1]){
                // 合并:起点不变,终点取两者最大值
                last[1] = Math.max(curr[1],last[1]);
            }else{
                res.add(curr);
            }
         }
         // 把 List 转成 int[][] 返回
        return res.toArray(new int[res.size()][]);
    }
}

超级好记口诀

先按起点排个序, 后一起点 ≤ 前终点就合并, 合并只改终点取最大, 不重叠就直接加。

相关推荐
Navigator_Z12 分钟前
LeetCode //C - 1221. Split a String in Balanced Strings
c语言·算法·leetcode
天疆说22 分钟前
庞特里亚金极小值原理的详细推导
算法
余俊晖35 分钟前
Self-OPD:去掉教师机的流匹配模型 On-Policy 蒸馏
人工智能·算法·机器学习
手写码匠37 分钟前
华为云Flexus+DeepSeek征文|华为云MaaS DeepSeek推理服务 × Flexus云服务器 × Dify一键部署:性能评测实战
人工智能·深度学习·算法·aigc
啥都想学点的研究生1 小时前
一篇文章讲清楚:逻辑回归
算法·机器学习·逻辑回归
货拉拉技术2 小时前
Agent 场景下 Token 成本优化的实战技巧
算法
hahaha60163 小时前
HLS高层次综合设计技巧--循环merge和循环split
人工智能·算法·计算机视觉
JAI科研3 小时前
Deepseek Agent Harness教程(七) | Deepseek Harness不是一个内核加一堆插件
开发语言·人工智能·深度学习·算法·自然语言处理·transformer·vllm
集思广益的灰太狼3 小时前
变频器启动致PLC数据异常?西门子G120配合滤波器EMC抑制方案
人工智能·算法·工控·emc·电磁兼容·变频器·西门子
方方洛3 小时前
vllm教程-03-架构设计
算法·架构