Insert Interval

简介: Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).

Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).

You may assume that the intervals were initially sorted according to their start times.

Example 1:
Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].

Example 2:
Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].

This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].

思路:

分3种情况讨论:

首先,如果插入的元素的start一直大于上一个的结束end,那么说明还没找到要插入的位置;

如果找到要插入的位置,即有start小于end。如果要插入的元素的end也小于找到要插入点的start,说明没有交集,直接将元素插入,设置标志位用来控制该新插入的元素只插入一次。

否则,如果插入的元素与后一个区间有交集,则将新插入的元素与后一个区间合并成新的要插入的元素,继续重复上面的过程。记得要判断flag看要插入的元素是否插入了。

C++实现代码:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

struct Interval
{
    int start;
    int end;
    Interval():start(0),end(0) {}
    Interval(int s,int e):start(s),end(e) {}
};

class Solution
{
public:
    vector<Interval> insert(vector<Interval> &intervals, Interval newInterval)
    {
        vector<Interval> ret;
        if(intervals.empty())
        {
            ret.push_back(newInterval);
            return ret;
        }
        int flag=0;
        int i;
        for(i=0; i<(int)intervals.size(); i++)
        {
            if(newInterval.start>intervals[i].end)
            {
                ret.push_back(intervals[i]);
            }
            else if(newInterval.end<intervals[i].start)
            {
                if(flag==1)
                    ret.push_back(intervals[i]);
                else
                {
                    flag=1;
                    ret.push_back(newInterval);
                    ret.push_back(intervals[i]);
                }
            }
            else
            {
                newInterval.start=min(newInterval.start,intervals[i].start);
                newInterval.end=max(newInterval.end,intervals[i].end);
            }
        }
        if(flag==0)
            ret.push_back(newInterval);
        return ret;
    }
};

int main()
{
    Solution s;
    Interval a1(1,2);
    Interval a2(3,5);
    Interval a3(6,7);
    Interval a4(8,10);
    Interval a5(12,16);
    vector<Interval> intervals= {a1,a2,a3,a4,a5};
    Interval newInternal= {0,0};
    vector<Interval> result=s.insert(intervals,newInternal);
    for(auto a:result)
        cout<<"[ "<<a.start<<" , "<<a.end<<" ]"<<endl;
}

运行结果:

 

class Solution {
public:
    vector<Interval> insert(vector<Interval> &intervals, Interval newInterval)
    {
        if(intervals.empty())
            return vector<Interval>({newInterval});
        vector<Interval> res;
        int i;
        int flag=false;
        for(i=0; i<intervals.size(); ++i)
        {

            if(intervals[i].end<newInterval.start)
            {
                res.push_back(intervals[i]);
            }
            else if(newInterval.end<intervals[i].start)
            {
                flag=true;
                res.push_back(newInterval);
                break;
            }
            else
            {
                newInterval.start=min(newInterval.start,intervals[i].start);
                newInterval.end=max(newInterval.end,intervals[i].end);
            }
        }
        for(;i<intervals.size();i++)
            res.push_back(intervals[i]);
        if(!flag)
            res.push_back(newInterval);
        return res;
    }
};

 

相关文章
|
1天前
|
数据采集 人工智能 安全
|
10天前
|
云安全 监控 安全
|
2天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
889 150
|
15天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1633 8
|
6天前
|
人工智能 前端开发 文件存储
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择
星哥带你玩转飞牛NAS,部署开源笔记TriliumNext!支持树状知识库、多端同步、AI摘要与代码高亮,数据自主可控,打造个人“第二大脑”。高效玩家的新选择,轻松搭建专属知识管理体系。
362 152
|
7天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
597 152
|
9天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
553 13
|
2天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话