合并区间 ---- 贪心算法

合并区间

分析:

区间问题, 的解决方式:

  1. 排序(可以选择用左端点排序, 或者右端点排序)
  2. 根据排序的结果, 总结规律, 得出解决问题的策略

第一步: 排序

按照左端点排序后, 能够得到的结论:
能够合并的区间, 都是连续的

意思是, 如果两个排序后的相邻的区间12, 不能够进行合并, 那么后面的区间, 都不能和区间1进行合并

第二步: 总结如何合并

排序之后可能会出现的情况

第一个区间:[left, right]

第二个区间:[a, b]

有重叠的部分, 一定是满足 a >= left, 合并一定是合并成:[left, max(right, b)]

没有重叠的部分, 一定满足 a > right, 不能合并区间12, 所以要向后移动, left == a, right == b, 看区间2和后面的区间能否合并

总结: 合并的方法就是求并集

代码:

java 复制代码
public ArrayList<Interval> merge (ArrayList<Interval> intervals) {
        // write code here
        ArrayList<Interval> res = new ArrayList<>();
        if(intervals.size() == 0) return res;
        Collections.sort(intervals, (o1, o2) -> o1.start - o2.start);
        int left = intervals.get(0).start;
        int right = intervals.get(0).end;
        for(int i = 1; i < intervals.size(); i++){
            int a = intervals.get(i).start;
            int b = intervals.get(i).end;
            if(a <= right){
                right = Math.max(right, b);
            }else{
                res.add(new Interval(left, right));
                left = a;
                right = b;
            }
        }
        res.add(new Interval(left, right));
        return res;
    }
相关推荐
lixinnnn.7 分钟前
01BFS:Three States
算法
晓纪同学23 分钟前
EffctiveC++_第三章_资源管理
开发语言·c++·算法
水云桐程序员41 分钟前
C语言编程基础,输入与输出
c语言·开发语言·算法
ZPC821043 分钟前
MoveIt Servo 与自己编写的 Action Server 通信
人工智能·算法·机器人
jllllyuz1 小时前
采用核函数的极限学习机(KELM)MATLAB实现
算法
apcipot_rain1 小时前
【天梯赛】2026天梯赛模拟赛——题解
开发语言·c++·算法·蓝桥杯·天梯赛
.柒宇.1 小时前
力扣hot100之最大子数组和(Java版)
数据结构·算法·leetcode
黎阳之光2 小时前
非视距·自愈·广覆盖|黎阳之光1.4&5.8GHz宽带自愈网无线基站,重构工业级无线通信
大数据·人工智能·算法·安全·数字孪生
llilian_162 小时前
铷原子频率标准 以时频基准破局,为计量校准赋能 时基铷钟
网络·功能测试·单片机·嵌入式硬件·测试工具·算法
6Hzlia2 小时前
【Hot 100 刷题计划】 LeetCode 131. 分割回文串 | C++ 回溯算法基础切割法
c++·算法·leetcode