14.合并区间(1,3)(2,5)=(1,5)

1.题目描述

示例 1:

复制代码
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

复制代码
输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

示例 3:

复制代码
输入:intervals = [[4,7],[1,4]]
输出:[[1,7]]
解释:区间 [1,4] 和 [4,7] 可被视为重叠区间。

2.解题思路

1)将区间列表里的区间,按左边界排序

2)(a,b)(c,d),if (c<=d) then 合并为(a,max(b,d));

3.代码

cpp 复制代码
vector<vector<int>> merge(vector<vector<int>>& intervals) {
        if(intervals.size()==0 || intervals.size()==1){
            return intervals;
        }
        sort(intervals.begin(),intervals.end());
        vector<vector<int>> res;
        res.push_back(intervals[0]);
        for(int i =0;i<=intervals.size()-1;i++){
            //从第一行元素(第一个区间开始遍历)
            //遍历每一个区间都和res里的最后一个元素进行对比看是否能合并
            if(res.back()[1]>=intervals[i][0]){
                //当前左边界比res的back元素的右边界小或者等于,则合并
                int L = res.back()[0];//合并后的左边界一定是左边区间的左边界
                int R = intervals[i][1];
                res.back()[1] = max(res.back()[1],R);//(a,b)(c,d),if (c<=d) then 合并为(a,max(b,d)),注意合并后的右边界的写法
            }else{
                res.push_back(intervals[i]);
            }
        }
         return res;
    }
相关推荐
GuWenyue4 分钟前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法
同勉共进1 小时前
记一例 vibe coding + gcc bug 导致的线程池死锁问题
c++·线程池·gcc·死锁·vibe coding
我叫洋洋1 小时前
C ++ [ hello world ]
c语言·c++·算法
奋发向前wcx3 小时前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法
王维同学5 小时前
[自学][Windows C++]RunOnceEx 注册表分组键的安全遍历
c++·windows·安全·开源
战族狼魂6 小时前
高频面试题精选:分治与AI Agent架构
人工智能·算法·大模型·大语言模型
李剑一6 小时前
你用过网易的将军令嘛?它底层实现账号保护的原理相当简单粗暴
算法
Scott9999HH6 小时前
告别流量波动玄学!从法拉第电磁定律到底层 C/C++ 流量累积算法,深度解密工业级电磁流量计选型与开发
c语言·c++·算法
中达瑞和-高光谱·多光谱6 小时前
1nm到8nm光谱分辨率,你的应用该选哪款光谱相机?
算法·高光谱·高光谱相机
脱胎换骨-军哥7 小时前
C++/Rust无缝互操作:混合系统新常态
开发语言·c++·rust