【算法详解】力扣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;
    }
};
相关推荐
谭欣辰4 分钟前
LCS(最长公共子序列)详解
开发语言·c++·算法
m0_629494738 分钟前
LeetCode 热题 100-----17.缺失的第一个正数
数据结构·算法·leetcode
Cando学算法8 分钟前
鸽笼原理(抽屉原理)
c++·算法·学习方法
Tisfy14 分钟前
LeetCode 0796.旋转字符串:暴力模拟
算法·leetcode·题解·模拟·字符串匹配
BlockChain88824 分钟前
AI+区块链深度探索:算法与账本的共生时代
人工智能·算法·区块链
生成论实验室34 分钟前
《源·觉·知·行·事·物:生成论视域下的统一认知语法》第一章 源:不可言说的生成之源
人工智能·科技·算法·生活·创业创新
2zcode1 小时前
基于低光照增强与轻量型CNN道路实时识别算法研究(UI界面+数据集+训练代码)
人工智能·算法·cnn·低光照增强·自动驾驶技术
郝学胜-神的一滴1 小时前
跨平台动态库与头文件:从原理到命名的深度解析
linux·c++·程序人生·unix·cmake
代码中介商1 小时前
C++ 仿函数(Functor)深度解析:从基础到应用
开发语言·c++
小雅痞1 小时前
[Java][Leetcode middle] 209. 长度最小的子数组
java·算法·leetcode