56. 合并区间 (LeetCode 热题 100)

题目来源:

56. 合并区间 - 力扣(LeetCode)

题目内容:

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间

示例 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] 可被视为重叠区间。

题目分析:

贪心&&数组

代码实现:

cpp 复制代码
class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        //对区间左端点  从小到大  进行排序
        ranges::sort(intervals);
        //sort(intervals.begini(),intervals.end());   //出错
        vector<vector<int>> ans;  //存放结果
        for(auto& p:intervals){
            if(!ans.empty()&&p[0]<=ans.back()[1])//可以合并
                ans.back()[1]=max(ans.back()[1],p[1]);//这个max函数的使用包含了区间包含和区间相交两种情况
            else//不可以合并
            ans.emplace_back(p);//新的合并区间
        }
        return ans;
    }
};

题目心得:

  1. 对vector容器的方法函数emplace_back(p); //构造一个对象并且在末尾插入
  2. ranges::sort(intervals);//按照左端点从小到大排序
  3. 用ans.back()[0]/ans.back()**[1]**来表示区间的左右端点
  4. 区间合并思想,之前在AcWIng上积累了模板,能看懂了,下一步是要自己会敲
相关推荐
songx_99几秒前
leetcode(填充每个节点的下一个右侧节点指针 II)
java·数据结构·算法·leetcode
chenyuhao20242 分钟前
vector深度求索(上)实用篇
开发语言·数据结构·c++·后端·算法·类和对象
江公望7 分钟前
Qt中,Latin-1字符编码简介
开发语言·arm开发·qt
温启志c#13 分钟前
winform c# 做的2个运控平台,通过修改表格 的方式,也可以通过语音识别的交互方式,更加智能。
开发语言·c#
@Zeker18 分钟前
并查集(Union-Find)数据结构详解
数据结构
花心蝴蝶.44 分钟前
JVM 内存结构
java·开发语言·jvm
97zz1 小时前
实战排查:Java 解析 Excel 大型 导致内存溢出问题的完整解决过程
java·开发语言·spring boot·excel
小小测试开发1 小时前
Python + MediaPipe 手势绘画高级应用:从基础到创意交互
开发语言·python·交互
minstbe1 小时前
半导体数据分析:GPR算法小白入门(三) 晶体管I-V特性仿真教程
算法
会跑的葫芦怪1 小时前
Go tool pprof 与 Gin 框架性能分析完整指南
开发语言·golang·gin