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

合并区间

分析:

区间问题, 的解决方式:

  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;
    }
相关推荐
hh随便起个名1 小时前
力扣二叉树的三种遍历
javascript·数据结构·算法·leetcode
Dingdangcat862 小时前
城市交通多目标检测系统:YOLO11-MAN-FasterCGLU算法优化与实战应用_3
算法·目标检测·目标跟踪
tang&3 小时前
滑动窗口:双指针的优雅舞步,征服连续区间问题的利器
数据结构·算法·哈希算法·滑动窗口
拼命鼠鼠3 小时前
【算法】矩阵链乘法的动态规划算法
算法·矩阵·动态规划
LYFlied3 小时前
【每日算法】LeetCode 17. 电话号码的字母组合
前端·算法·leetcode·面试·职场和发展
式5164 小时前
线性代数(八)非齐次方程组的解的结构
线性代数·算法·机器学习
橘颂TA5 小时前
【剑斩OFFER】算法的暴力美学——翻转对
算法·排序算法·结构与算法
叠叠乐5 小时前
robot_state_publisher 参数
java·前端·算法
hweiyu005 小时前
排序算法:冒泡排序
算法·排序算法
brave and determined5 小时前
CANN训练营 学习(day9)昇腾AscendC算子开发实战:从零到性能冠军
人工智能·算法·机器学习·ai·开发环境·算子开发·昇腾ai