2021-09-03 leetcode 数据结构 合并区间

合并区间

请添加图片描述

题中的 intervals 是一个动态二维数组
我们可以定义一个新动态数组vec

在对intervals排序后 ,直接将第一行数组存 vec (因为排序后的intervals的第一行数组的左区间值一定极小 (这是离散里的极小))
注意:对二维数组排序规则 参考 c++ 二维数组排序

定义 两个变量i = 1, j = 0
使 j 指向 第一行的数组 ,i指向第二行的数组
(理解完代码后,我们会发现 j 和 i有点像之前几篇的快慢指针)

此时开始合并操作
若 i指向的数组的左区间 < j指向的右区间 ,即 intervals[i][0] < intervals[j][1]可以合并 vec[j][1] = max(intervals[I][1],intervals[j][1])
反之,不可合并 则 该行数组已经确定 向vec中存入该数组
j++,继续指向下一行

请添加图片描述

以 eg1 为sample
在这里插入图片描述

j指向第0行 i指向第1行

进行第一次的合并判断
在这里插入图片描述

vec 现在状态[1,6]

然后进行下一次循环 i变到2,指向第2行

在这里插入图片描述
因此 直接存入该行

后面操作相同,就不11举例了

//今天这篇写的好细

以下是AC代码

class Solution 
{
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) 
    {
        if(intervals.size() == 1)
            return intervals;
        sort(intervals.begin(), intervals.end());
        vector<vector<int>> vec;
        vec.push_back(intervals[0]);
        int i = 1, j = 0;
        for(i = 1; i < intervals.size(); i++)
        {
            if(intervals[i][0] <= vec[j][1])
                vec[j][1] = vec[j][1]=max(vec[j][1], intervals[i][1]);
            else
            {
                vec.push_back(intervals[i]);
                j++;
            }     
        }
        return vec;
    }
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聪明的Levi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值