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

合并区间

分析:

区间问题, 的解决方式:

  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;
    }
相关推荐
顾你&30 分钟前
机器学习之无监督学习算法大总结
学习·算法·机器学习
神龙斗士2401 小时前
Java 数组的定义与使用
java·开发语言·数据结构·算法
Y.O.U..1 小时前
力扣HOT100-跳跃游戏II
算法·leetcode
hn小菜鸡1 小时前
LeetCode 3132.找出与数组相加的整数 II
算法·leetcode·职场和发展
微笑尅乐1 小时前
数组模拟加法——力扣66.加一
算法·leetcode·职场和发展
_不会dp不改名_2 小时前
leetcode_146 LRU缓存
算法·leetcode·缓存
帅帅爱数学2 小时前
DeepMimic论文详细解析:基于示例引导的深度强化学习实现物理仿真角色技能
算法·强化学习
IT成长日记3 小时前
【LVS入门宝典】LVS调度算法轮询(RR)深度解析:从原理到实战的公平调度之道
算法·lvs·rr·轮询调度算法
NAGNIP3 小时前
一文搞懂量化、剪枝和知识蒸馏都是什么?
算法
点云SLAM4 小时前
GTSAM 中自定义因子(Custom Factor)的详解和实战示例
算法·机器人·slam·后端优化·gtsam·gtsam自定义因子·因子图