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

超级好记口诀

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

相关推荐
小雨下雨的雨4 小时前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
xieliyu.7 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
一条小锦吕*7 小时前
基于Spring Boot + 数据可视化 + 协同过滤算法的推荐系统设计与实现(源码+论文+部署全讲解)
spring boot·算法·信息可视化
如竟没有火炬9 小时前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵
8Qi89 小时前
LeetCode 1143 & 718:最长公共子序列 / 最长重复子数组
算法·leetcode·职场和发展·动态规划
绿算技术9 小时前
万卡推理集群存储选型分析:从核心架构到应用视角
大数据·科技·算法·架构
想吃火锅100510 小时前
【leetcode】1.两数之和js版
javascript·算法·leetcode
net3m3311 小时前
一阶软件低通滤波器算法
人工智能·算法
水木流年追梦11 小时前
大模型入门-大模型优化方法12-YaRN 长文本外推技术
人工智能·分布式·算法·正则表达式·prompt