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

超级好记口诀

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

相关推荐
派大星~课堂2 小时前
【力扣-138. 随机链表的复制 ✨】Python笔记
python·leetcode·链表
cpp_25012 小时前
P10108 [GESP202312 六级] 闯关游戏
数据结构·c++·算法·动态规划·题解·洛谷·gesp六级
Lzh编程小栈2 小时前
数据结构与算法之队列深度解析:循环队列+C 语言硬核实现 + 面试考点全梳理
c语言·开发语言·汇编·数据结构·后端·算法·面试
AbandonForce2 小时前
模拟实现vector
开发语言·c++·算法
少许极端2 小时前
算法奇妙屋(四十二)-贪心算法学习之路 9
学习·算法·贪心算法
CoderCodingNo2 小时前
【NOIP】1998真题解析 luogu-P1010 幂次方 | GESP四、五级以上可练习
算法
py有趣2 小时前
力扣热门100题之最小覆盖子串
算法·leetcode
汀、人工智能2 小时前
[特殊字符] 第102课:添加与搜索单词
数据结构·算法·均值算法·前缀树·trie·添加与搜索单词
汀、人工智能2 小时前
07 - 字典dict:哈希表的Python实现
数据结构·算法·数据库架构·哈希表的python实现