【数据结构-扫描线】力扣57. 插入区间

给你一个 无重叠的 ,按照区间起始端点排序的区间列表 intervals,其中 intervals[i] = [starti, endi] 表示第 i 个区间的开始和结束,并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval = [start, end] 表示另一个区间的开始和结束。

在 intervals 中插入区间 newInterval,使得 intervals 依然按照 starti 升序排列,且区间之间不重叠(如果有必要的话,可以合并区间)。

返回插入之后的 intervals。

注意 你不需要原地修改 intervals。你可以创建一个新数组然后返回它。

示例 1:

输入:intervals = [[1,3],[6,9]], newInterval = [2,5]

输出:[[1,5],[6,9]]

示例 2:

输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]

输出:[[1,2],[3,10],[12,16]]

解释:这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。

扫描线

cpp 复制代码
class Solution {
public:
    vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
        vector<vector<int>> answer;
        int left = newInterval[0], right = newInterval[1];
        bool placed = false;
        for(auto interval : intervals){
            //区间在插入区间右侧
            if(interval[0] > right){
                if(!placed){
                    answer.push_back({left, right});
                    placed = true;
                }
                answer.push_back(interval);
            }
            else if(interval[1] < left){
                answer.push_back(interval);
            }
            else{
                left = min(left, interval[0]);
                right = max(right, interval[1]);
            }
        }
        if(!placed){
            answer.push_back({left, right});
        }
        return answer;
    }
};

这道题涉及到合并区间。我们首先遍历数组intervals,当某个区间和插入区间没有交集的时候,就直接push他,当有交集的时候,我们就要可以将这些区间和插入区间进行合并。

我们还设定了一个布尔值placed来判断这个区间的放置位置,当插入区间的最右边端点在遍历的区间的左侧的时候,那么这时候就不进行合并操作,就要将插入区间push,并且设置placed为true,然后再push遍历到的区间。

还有一种情况,插入区间的最右端点较大,以至于到最后一个区间进行的也是合并操作,这时候遍历结束,直接push经过合并的插入区间。

相关推荐
炸膛坦客2 小时前
嵌入式 - 数据结构与算法:(1-7)数据结构 - 顺序表和链表的对比
数据结构·链表
Jasmine_llq2 小时前
《B3867 [GESP202309 三级] 小杨的储蓄》
算法·循环遍历·数组累加(模拟)·索引定位·顺序输出
啦啦啦_99992 小时前
案例之 逻辑回归_电信用户流失预测
算法·机器学习·逻辑回归
风筝在晴天搁浅3 小时前
快手/字节 CodeTop LeetCode 415.字符串相加
算法·leetcode
hoiii1873 小时前
基于栅格法的机器人工作空间划分系统
数据结构·机器人
DragonnAi3 小时前
猫咪如厕检测与分类识别系统系列【十四】 项目结构重新整理-即将开源完整算法
算法·开源
机器视觉_Explorer3 小时前
【halcon】编程技巧:鼠标擦除
图像处理·人工智能·深度学习·算法·视觉检测
灵智实验室4 小时前
PX4状态估计技术EKF2详解(二):EKF2 误差状态动力学与协方差传播
算法·无人机·px 4
米粒15 小时前
力扣算法刷题 Day 64 Floyd算法 & A* 算法 & 总结篇
算法·leetcode·职场和发展
XX風5 小时前
OpenGL中Face culling 面剔除的具体实现
算法·图形渲染