后端开发刷题 | 合并区间

描述

给出一组区间,请合并所有重叠的区间。

请保证合并后的区间按区间起点升序排列。

数据范围:区间组数 0≤n≤2×105,区间内 的值都满足 0≤val≤2×105

示例1

输入:

复制代码
[[10,30],[20,60],[80,100],[150,180]]

返回值:

复制代码
[[10,60],[80,100],[150,180]]

示例2

输入:

复制代码
[[0,10],[10,20]]

返回值:

复制代码
[[0,20]]

思路分析:

该题可以使用贪心算法解决,找出整体当中给的每个局部子结构的最优解,并且最终将所有的这些局部最优解结合起来形成整体上的一个最优解。

步骤:

1.先把这些区间进行排序,使用 Collections.sort()方法

2.根据前一个区间的end小于当前区间的start,区间不重叠;反之则重叠。

3.将这些区间添加到res里面,最终返回res

代码分析:

java 复制代码
import java.util.*;

/*
 * public class Interval {
 *   int start;
 *   int end;
 *   public Interval(int start, int end) {
 *     this.start = start;
 *     this.end = end;
 *   }
 * }
 */

public class Solution {
    /**
     * 
     * @param intervals Interval类ArrayList 
     * @return Interval类ArrayList
     */
    public ArrayList<Interval> merge (ArrayList<Interval> intervals) {
        ArrayList<Interval> res=new ArrayList<>();
        //特殊情况
        if(intervals.size()==0) return res;
        //按区间进行排序
        Collections.sort(intervals,(o1,o2)->o1.start-o2.start);
        //把排序后的第一个区间放入res
        res.add(intervals.get(0));
        int before=0;
        for(int i=1;i<intervals.size();i++){
            Interval o1=intervals.get(i);
            Interval origin=res.get(before);

            //区间不重叠,前一个区间的end小于当前区间的start
            if(origin.end<o1.start){
                //添加
                res.add(o1);
                before++;
            }else{
                //区间重叠,前一个区间的end大于当前区间的start
                res.remove(before);
                Interval s=new Interval(origin.start,Math.max(origin.end,o1.end));
                res.add(s);
            }
        }
        return res;

    }
}
相关推荐
胖咕噜的稞达鸭1 小时前
算法入门:专题攻克一---双指针(3)有效三角形的个数 查找总价格为目标值的两个商品(剑指offer题目)
算法
gopyer3 小时前
180课时吃透Go语言游戏后端开发6:Go语言的循环语句
开发语言·游戏·golang·循环语句
毕设源码-朱学姐4 小时前
【开题答辩全过程】以 爱心捐赠网站为例,包含答辩的问题和答案
java·eclipse
Pr Young4 小时前
服务优雅停止和服务优雅启动
后端
嘟嘟MD5 小时前
程序员副业 | 2025年9月复盘
后端·aigc
楼田莉子6 小时前
Qt开发学习——QtCreator深度介绍/程序运行/开发规范/对象树
开发语言·前端·c++·qt·学习
尘觉6 小时前
中秋节与 Spring Boot 的思考:一场开箱即用的团圆盛宴
java·spring boot·后端
逻辑留白陈6 小时前
Adaboost进阶:与主流集成算法对比+工业级案例+未来方向
算法
Learn Beyond Limits6 小时前
Mean Normalization|均值归一化
人工智能·神经网络·算法·机器学习·均值算法·ai·吴恩达
天选之女wow6 小时前
【代码随想录算法训练营——Day28】贪心算法——134.加油站、135.分发糖果、860.柠檬水找零、406.根据身高重建队列
算法·leetcode·贪心算法