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

超级好记口诀

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

相关推荐
syagain_zsx3 小时前
算法基础篇 · 03 枚举(C++ 题解)
c++·算法·二进制·枚举
weixin_307779134 小时前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab
我是章汕呐5 小时前
地级市能源消耗量及消耗强度数据【2006-2023年】平衡面板
人工智能·经验分享·算法·回归
charliejohn5 小时前
计算机考研 408 数据结构 堆的插入与删除 堆排序
算法
老鱼说AI5 小时前
从点积到希尔伯特空间:向量内积的几何本质与大模型相似度度量
人工智能·深度学习·线性代数·算法·机器学习·数学建模
地平线开发者6 小时前
模型部署|如何解决算子约束
深度学习·算法·自动驾驶
Navigator_Z6 小时前
LeetCode //C - 1254. Number of Closed Islands
c语言·算法·leetcode
deepseek237 小时前
GPT-6 Astra 破解 FrontierMath 九年悬案拆解:调和熵投票规则反证核恒非空,局部搜索如何终结反例悬赏
人工智能·算法·ai agent
syagain_zsx7 小时前
算法基础篇 · 04 前缀和(C++ 题解)
c++·算法·前缀和
青山是哪个青山8 小时前
LeetCode 123:买卖股票的最佳时机 III
算法