【算法详解】力扣56.合并区间

一、题目描述

力扣链接:力扣56.合并区间

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

示例 1:

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]

输出:[[1,6],[8,10],[15,18]]

解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

二、C++题解

将这些区间按区间左值从小到大排序,对于几个相交的区间,最终合并生成的区间结果的左区间一定是这些区间中左值最小的,而区间右值一定是这些区间中右值最大的。

cpp 复制代码
class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<vector<int>> result;

        sort(intervals.begin(), intervals.end());

        result.push_back(intervals[0]); // 先把第一个丢进去
        for (int i = 0; i < intervals.size(); ++i) {
            auto& curr = intervals[i]; // 当前区间的引用
            auto& last = result.back(); // 已经整理好的最后一个区间

            if (curr[0] <= last[1]) { // 如果当前区间的左区间比已经存好的区间的右区间小
                last[1] = max(last[1], curr[1]); // 修改存储区间的右区间
            }
            else {
                result.push_back(curr);
            }
        }

        return result;
    }
};
相关推荐
HABuo2 分钟前
【Linux进程(三)】僵尸进程、孤儿进程&进程优先级剖析
linux·运维·服务器·c语言·c++·ubuntu·centos
vyuvyucd4 分钟前
现代C++高效日志系统构建指南
c++
Yu_Lijing5 分钟前
基于C++的《Head First设计模式》笔记——装饰者模式
c++·笔记·设计模式
天赐学c语言6 分钟前
1.6 - 复制IP地址 && vector和list的区别
c++·算法·leecode
studytosky9 分钟前
Linux系统编程:深度解析 Linux 进程,切换调度、环境变量与虚拟内存
linux·运维·服务器·开发语言·网络·c++
多米Domi0119 分钟前
0x3f 第23天 黑马web (前端三件套,maven,web入门、mysql)黑马反射注解 hot100普通数组
java·python·mysql·算法·leetcode·maven
上海锟联科技9 分钟前
DAS-U1000 极致版解调卡
数据结构·算法·嵌入式实时数据库
草莓熊Lotso2 小时前
Qt 进阶核心:UI 开发 + 项目解析 + 内存管理实战(从 Hello World 到对象树)
运维·开发语言·c++·人工智能·qt·ui·智能手机
TonyLee0178 小时前
LLVM安装(ubuntu22)
c++
Swift社区9 小时前
LeetCode 465 最优账单平衡
算法·leetcode·职场和发展