【算法详解】力扣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;
    }
};
相关推荐
O***Z61613 小时前
【语义分割】12个主流算法架构介绍、数据集推荐、总结、挑战和未来发展
算法·架构
程序员-周李斌13 小时前
ArrayList 源码深度分析(基于 JDK 8)
java·开发语言·数据结构·算法·list
高洁0113 小时前
具身智能-视觉语言导航(VLN)(3
深度学习·神经网络·算法·aigc·transformer
达不溜先生 ୧⍢⃝୨13 小时前
循环赛日程表问题
c语言·算法·递归·分治·循环赛日程表·动态二维数组
2401_8933266213 小时前
力扣133.克隆图
算法·leetcode·职场和发展
不知所云,13 小时前
2.windows c/c++ 编译器安装, mingw和clang
c语言·c++·windows·mingw·clang·c编译器
zxsz_com_cn13 小时前
设备预测性维护系统实战指南:架构、算法与落地路径
算法·架构
爪哇部落算法小助手13 小时前
爪哇周赛 Round 3
数据结构·c++·算法
十五年专注C++开发14 小时前
Mimalloc:一款高性能、低开销和线程安全的C++内存分配器
c++·内存分配·mimalloc
吃着火锅x唱着歌14 小时前
LeetCode 3623.统计梯形的数目 I
算法·leetcode·职场和发展