【算法详解】力扣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;
    }
};
相关推荐
haogexiaole10 分钟前
贪心算法python
算法·贪心算法
希望201724 分钟前
图论基础知识
算法·图论
m0_7135418429 分钟前
systemverilog如何解决不能使用变量索引来进行位选择的范围指定
算法·systemverilog
Humbunklung37 分钟前
unordered_map使用MFC的CString作为键值遇到C2056和C2064错误
c++·stl·mfc
七牛云行业应用1 小时前
深度解析强化学习(RL):原理、算法与金融应用
人工智能·算法·金融
和编程干到底1 小时前
数据结构 栈和队列、树
数据结构·算法
纪元A梦1 小时前
贪心算法在GNN邻域采样问题中的深度解析
算法·贪心算法
宇钶宇夕1 小时前
西门子 S7-200 SMART PLC 核心指令详解:从移位、上升沿和比较指令到流水灯控制程序实战
运维·算法·自动化
爱编程的化学家2 小时前
代码随想录算法训练营第十一天--二叉树2 || 226.翻转二叉树 / 101.对称二叉树 / 104.二叉树的最大深度 / 111.二叉树的最小深度
数据结构·c++·算法·leetcode·二叉树·代码随想录
tqs_123452 小时前
redis zset 处理大规模数据分页
java·算法·哈希算法