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

一、题目描述

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

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

示例 1:

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

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

解释:区间 1,32,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;
    }
};
相关推荐
x_xbx14 小时前
LeetCode:739. 每日温度
算法·leetcode·职场和发展
不会C语言的男孩14 小时前
C++ Primer Plus 第3章:处理数据
开发语言·c++
RuiZN14 小时前
UE5 蓝图 FPS 02 Event Beginplay
c++·ue5
欧米欧14 小时前
C++进阶之AVL树
java·服务器·c++
艾莉丝努力练剑14 小时前
【Linux:文件】库的制作与原理进阶
linux·运维·服务器·网络·数据库·c++·人工智能
计算机安禾14 小时前
【算法分析与设计】第20篇:图论中的NP困难问题与近似策略
大数据·人工智能·算法
Trouvaille ~14 小时前
【优选算法篇】深入浅出链表算法:交换、重排与合并的终极策略
c++·算法·链表·面试·蓝桥杯·笔试·后端开发
Z_Wonderful14 小时前
大文件上传-分片上传-秒传
算法·哈希算法
heimeiyingwang15 小时前
【架构实战】分布式ID生成方案:雪花算法与业务ID设计
分布式·算法·架构
圣保罗的大教堂15 小时前
leetcode 3121. 统计特殊字母的数量 II 中等
leetcode