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;
    }
相关推荐
王老师青少年编程4 小时前
2024年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第3题)
c++·题解·真题·csp·信奥赛·csp-s·提高组
凡人叶枫5 小时前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++
CSDN_RTKLIB5 小时前
使用三方库头文件未使用导出符号情景
c++
zheyutao5 小时前
字符串哈希
算法
A尘埃5 小时前
保险公司车险理赔欺诈检测(随机森林)
算法·随机森林·机器学习
大江东去浪淘尽千古风流人物5 小时前
【VLN】VLN(Vision-and-Language Navigation视觉语言导航)算法本质,范式难点及解决方向(1)
人工智能·python·算法
rainbow68896 小时前
Linux文件描述符与重定向原理
c++
努力学算法的蒟蒻6 小时前
day79(2.7)——leetcode面试经典150
算法·leetcode·职场和发展
2401_841495646 小时前
【LeetCode刷题】二叉树的层序遍历
数据结构·python·算法·leetcode·二叉树··队列
AC赳赳老秦6 小时前
2026国产算力新周期:DeepSeek实战适配英伟达H200,引领大模型训练效率跃升
大数据·前端·人工智能·算法·tidb·memcache·deepseek