贪心算法|56.合并区间

力扣题目链接

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<vector<int>> result;
        if (intervals.size() == 0) return result; // 区间集合为空直接返回
        // 排序的参数使用了lambda表达式
        sort(intervals.begin(), intervals.end(), [](const vector<int>& a, const vector<int>& b){return a[0] < b[0];});

        // 第一个区间就可以放进结果集里,后面如果重叠,在result上直接合并
        result.push_back(intervals[0]); 

        for (int i = 1; i < intervals.size(); i++) {
            if (result.back()[1] >= intervals[i][0]) { // 发现重叠区间
                // 合并区间,只更新右边界就好,因为result.back()的左边界一定是最小值,因为我们按照左边界排序的
                result.back()[1] = max(result.back()[1], intervals[i][1]); 
            } else {
                result.push_back(intervals[i]); // 区间不重叠 
            }
        }
        return result;
    }
};

思路

本题的本质其实还是判断重叠区间问题。

大家如果认真做题的话,话发现和我们刚刚讲过的452. 用最少数量的箭引爆气球 (opens new window)和 435. 无重叠区间 (opens new window)都是一个套路。

这几道题都是判断区间重叠,区别就是判断区间重叠后的逻辑,本题是判断区间重贴后要进行区间合并。

所以一样的套路,先排序,让所有的相邻区间尽可能的重叠在一起,按左边界,或者右边界排序都可以,处理逻辑稍有不同。

按照左边界从小到大排序之后,如果 intervals[i][0] <= intervals[i - 1][1] 即intervals[i]的左边界 <= intervals[i - 1]的右边界,则一定有重叠。(本题相邻区间也算重贴,所以是<=)

这么说有点抽象,看图:(注意图中区间都是按照左边界排序之后了

56.合并区间

知道如何判断重复之后,剩下的就是合并了,如何去模拟合并区间呢?

其实就是用合并区间后左边界和右边界,作为一个新的区间,加入到result数组里就可以了。如果没有合并就把原区间加入到result数组。

需要抽时间再看看哦! 

最近更新

  1. TCP协议是安全的吗?

    2024-04-15 07:48:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-15 07:48:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-15 07:48:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-15 07:48:03       20 阅读

热门阅读

  1. 第一章:系统架构设计师概述

    2024-04-15 07:48:03       12 阅读
  2. python递归统计文件夹下pdf文件的数量

    2024-04-15 07:48:03       17 阅读
  3. LeetCode1题:两数之和(python3)

    2024-04-15 07:48:03       17 阅读
  4. transformer上手(5) —— 必要的 Pytorch 知识

    2024-04-15 07:48:03       15 阅读
  5. LINUX【网络编程】UDP程序绑定发送主机IP及端口

    2024-04-15 07:48:03       14 阅读
  6. 【计算机网络】(一)计算机网络概述

    2024-04-15 07:48:03       14 阅读
  7. excel表导入导出

    2024-04-15 07:48:03       19 阅读