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

合并区间

分析:

区间问题, 的解决方式:

  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;
    }
相关推荐
roman_日积跬步-终至千里44 分钟前
【机器学习】“回归“算法模型的三个评估指标:MAE(衡量预测准确性)、MSE(放大大误差)、R²(说明模型解释能力)
算法·机器学习·回归
小指纹2 小时前
图论-最短路Dijkstra算法
数据结构·c++·算法·深度优先·图论
赴3353 小时前
逻辑回归 银行贷款资格判断案列优化 交叉验证,调整阈值,下采样与过采样方法
算法·机器学习·逻辑回归·下采样·交叉验证·过采样·阈值
2501_924878733 小时前
无人机光伏巡检缺陷检出率↑32%:陌讯多模态融合算法实战解析
开发语言·人工智能·算法·视觉检测·无人机
沉睡的无敌雄狮3 小时前
无人机光伏巡检漏检率↓78%!陌讯多模态融合算法实战解析
人工智能·算法·计算机视觉·目标跟踪
magicwt4 小时前
《从零构建大模型》读书笔记
算法
大胖猫L4 小时前
深搜与广搜在 TypeScript 类型递归中的应用
前端·算法
2202_756749695 小时前
02 基于sklearn的机械学习-KNN算法、模型选择与调优(交叉验证、朴素贝叶斯算法、拉普拉斯平滑)、决策树(信息增益、基尼指数)、随机森林
python·算法·决策树·随机森林·机器学习·sklearn
ATaylorSu5 小时前
经典算法之美:冒泡排序的优雅实现
开发语言·笔记·学习·算法
菜鸡nan5 小时前
23th Day| 39.组合总和,40.组合总和II,131.分割回文串
算法·leetcode·职场和发展