力扣热门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()][]);
    }
}

超级好记口诀

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

相关推荐
碧海银沙音频科技研究院3 小时前
炬芯ATS3089X手表的HFP通话不自动路由到设备BT的问题解决
网络·人工智能·嵌入式硬件·算法
mmmmath_38 小时前
LeetCode.199.二叉树的右视图
数据结构·leetcode
专注仿真8 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
码爸8 小时前
支持向量机介绍与示例
算法·机器学习·支持向量机
怕浪猫8 小时前
2028编程圈很火的10个Skills
算法·面试·github
Nil20813 小时前
leetcode 198打家劫舍
算法·leetcode·职场和发展
Shaoshing13 小时前
前缀和与差分
java·数据结构·算法·前缀和·差分
mmmmath_313 小时前
LeetCode.429.N叉树的层序遍历
数据结构·leetcode
loulanyue_14 小时前
构建房产认知决策智能:Harness底座与AI自进化的技术实践——读贝壳首席算法科学家尹俊希2026云栖专场演讲
人工智能·算法