hot 100 56. 合并区间

合并区间


问题描述

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。


样例输入

cpp 复制代码
intervals = [[1,3],[2,6],[8,10],[15,18]]

样例输出

cpp 复制代码
[[1,6],[8,10],[15,18]]

评测用例规模与约定

1 <= intervals.length <= 10^4

intervals[i].length == 2

0 <= starti <= endi <= 10^4


解析

按照区间左端点排序,然后比较在不在一个区间,在就合并,不在就加入。

为何按照左端点,右端点也行不过到倒着遍历,主要是有个顺序可以合并。


参考程序

cpp 复制代码
class Solution {
    public int[][] merge(int[][] intervals) {
        if(intervals.length==0)return new int[0][2];
        Arrays.sort(intervals,new Comparator<int[]>() {
            public int compare(int[] interval1,int[] interval2){
                return interval1[0]-interval2[0];
            }
        });
        List<int[]>merged=new ArrayList<int[]>();
        for(int i=0;i<intervals.length;i++){
            int l=intervals[i][0],r=intervals[i][1];
            if(merged.size()==0||merged.get(merged.size()-1)[1]<l)
            merged.add(new int[]{l,r});
            else merged.get(merged.size()-1)[1]=Math.max(merged.get(merged.size()-1)[1],r);
        }
        return merged.toArray(new int[merged.size()][]);
    }
}

难度等级

⭐️⭐️⭐️⭐️(1~10星)

以个人刷题整理为目的,如若侵权,请联系删除~

相关推荐
wearegogog1232 分钟前
三电平SVPWM逆变器仿真指南
单片机·算法
笨笨饿24 分钟前
74_SysTick滴答定时器中断
c语言·开发语言·人工智能·单片机·嵌入式硬件·算法·学习方法
pkowner1 小时前
若依分页问题及解决方法
java·前端·算法
呃呃本1 小时前
算法题(栈)
算法
通信小呆呆1 小时前
基于 ADMM-MFOCUSS 的捷变频雷达扩展目标稀疏重构原理
算法·重构·信息与通信·信号处理·雷达
橙淮2 小时前
Java数组与链表:特性对比与应用场景
数据结构·算法
炽烈小老头2 小时前
【每天学习一点算法 2026/05/15】被围绕的区域
学习·算法·深度优先
芜湖xin2 小时前
【题解-洛谷】P1012 [NOIP 1998 提高组] 拼数
算法·贪心
xiaoxiaoxiaolll3 小时前
金属结构疲劳寿命预测与健康监测技术
人工智能·算法·机器学习
故事和你913 小时前
洛谷-【图论2-1】树4
开发语言·数据结构·c++·算法·动态规划·图论