我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++怎么插入区间

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++怎么插入区间

本篇内容介绍了“C++怎么插入区间”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

插入区间

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:

Input: intervals = [[1,3],[6,9]], newInterval = [2,5]
Output: [[1,5],[6,9]]

Example 2:

Input: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
Output: [[1,2],[3,10],[12,16]]
Explanation: Because the new interval [4,8] overlaps with [3,5],[6,7],[8,10].

NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.

这道题让我们在一系列非重叠的区间中插入一个新的区间,可能还需要和原有的区间合并,可以对给定的区间集进行一个一个的遍历比较,那么会有两种情况,重叠或是不重叠,不重叠的情况最好,直接将新区间插入到对应的位置即可,重叠的情况比较复杂,有时候会有多个重叠,需要更新新区间的范围以便包含所有重叠,之后将新区间加入结果 res,最后将后面的区间再加入结果 res 即可。具体思路是,用一个变量 cur 来遍历区间,如果当前 cur 区间的结束位置小于要插入的区间的起始位置的话,说明没有重叠,则将 cur 区间加入结果 res 中,然后 cur 自增1。直到有 cur 越界或有重叠 while 循环退出,然后再用一个 while 循环处理所有重叠的区间,每次用取两个区间起始位置的较小值,和结束位置的较大值来更新要插入的区间,然后 cur 自增1。直到 cur 越界或者没有重叠时 while 循环退出。之后将更新好的新区间加入结果 res,然后将 cur 之后的区间再加入结果 res 中即可,参见代码如下:

解法一:

class Solution {public:    vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {        vector<vector<int>> res;        int n = intervals.size(), cur = 0;        while (cur < n && intervals[cur][1] < newInterval[0]) {            res.push_back(intervals[cur++]);        }        while (cur < n && intervals[cur][0] <= newInterval[1]) {            newInterval[0] = min(newInterval[0], intervals[cur][0]);            newInterval[1] = max(newInterval[1], intervals[cur][1]);            ++cur;        }        res.push_back(newInterval);        while (cur < n) {            res.push_back(intervals[cur++]);        }        return res;    }};

下面这种方法的思路跟上面的解法很像,只不过没有用 while 循环,而是使用的是 for 循环,但是思路上没有太大的区别,变量 cur 还是用来记录新区间该插入的位置,稍有不同的地方在于在 for 循环中已经将新区间后面不重叠的区间也加进去了,for 循环结束后就只需要插入新区间即可,参见代码如下:

解法二:

class Solution {public:    vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {        vector<vector<int>> res;        int n = intervals.size(), cur = 0;        for (int i = 0; i < n; ++i) {            if (intervals[i][1] < newInterval[0]) {                res.push_back(intervals[i]);                ++cur;            } else if (intervals[i][0] > newInterval[1]) {                res.push_back(intervals[i]);            } else {                newInterval[0] = min(newInterval[0], intervals[i][0]);                newInterval[1] = max(newInterval[1], intervals[i][1]);            }        }        res.insert(res.begin() + cur, newInterval);        return res;    }};

下面这种解法就是把上面解法的 for 循环改为了 while 循环,其他的都没有变,代码如下:

解法三:

class Solution {public:    vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {        vector<vector<int>> res;        int n = intervals.size(), cur = 0, i = 0;        while (i < n) {            if (intervals[i][1] < newInterval[0]) {                res.push_back(intervals[i]);                ++cur;            } else if (intervals[i][0] > newInterval[1]) {                res.push_back(intervals[i]);            } else {                newInterval[0] = min(newInterval[0], intervals[i][0]);                newInterval[1] = max(newInterval[1], intervals[i][1]);            }            ++i;        }        res.insert(res.begin() + cur, newInterval);        return res;    }};

“C++怎么插入区间”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++怎么插入区间

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++怎么插入区间

本篇内容介绍了“C++怎么插入区间”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!插入区间Given a set of non-overlap
2023-06-20

sql怎么插入时间

最佳实践推荐使用 current_timestamp 函数插入当前系统时间,以确保时间准确。此外,可考虑时区,使用标准时间格式,避免使用 null 值,并使用 default 约束或触发器来插入默认时间值。SQL 中插入时间的最佳实践如何
sql怎么插入时间
2024-05-30

【每日一题】57. 插入区间

【每日一题】57. 插入区间 57. 插入区间题目描述解题思路 57. 插入区间 题目描述 给你一个 无重叠的 ,按照区间起始端点排序的区间列表。 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要
2023-08-30

C++怎么合并区间

本篇内容主要讲解“C++怎么合并区间”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么合并区间”吧!合并区间Given a collection of intervals, merge a
2023-06-20

C#中怎么向Excel插入数据

本篇文章给大家分享的是有关C#中怎么向Excel插入数据,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。调用方法:MengXianhui.Utility.ExcelReport.
2023-06-18

C++怎么实现链表插入排序

本篇内容主要讲解“C++怎么实现链表插入排序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么实现链表插入排序”吧!链表插入排序链表的插入排序实现原理很简单,就是一个元素一个元素的从原链表
2023-06-20

c语言中区间怎么表示

c 语言中区间表示使用方括号,左侧表示左端点,右侧表示右端点。区间类型包括包含端点的闭区间、不包含端点的开区间以及半开半闭区间。c 语言提供了区间合并、减法、交集、余集等运算符。通过示例,可以清楚地理解区间表示和运算符的使用方式。C 语言中
c语言中区间怎么表示
2024-05-02

c++怎么清空输入缓冲区

在C++中,你可以使用cin.ignore()来清空输入缓冲区。它会忽略掉缓冲区中剩余的所有字符,直到换行符为止。以下是一个示例代码:#include int main() {int num;std::cout > num;// 清空输入
2023-10-23

pycharm怎么插入python

在 pycharm 中插入 python 代码的方法有:从文件插入、从剪贴板插入、从模板插入。首先,打开 pycharm ide、创建或打开项目、打开文件并定位插入点。然后,选择插入方法,最后保存更改。PyCharm中插入Python代码
pycharm怎么插入python
2024-05-22

Css怎么插入图片

小编给大家分享一下Css怎么插入图片,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!css的全称是什么css的全称是Cascading Style Sheets(层
2023-06-14

ppt怎么插入文件

这篇文章将为大家详细讲解有关ppt怎么插入文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。ppt插入文件的方法:首先打开电脑,打开PPT,点击【插入】;然后点击【对象】,并点击【由文件创建】;接着点击【
2023-06-14

ppt怎么插入页码

ppt插入页码的方法:1、使用母板视图插入页码;2、在幻灯片底部插入页码;3、使用页眉/页脚功能插入页码。PPT(Microsoft PowerPoint)是一款常用的演示文稿制作工具,常用于会议、教育、培训等场合。在制作演示文稿时,页码通
2023-07-27

html怎么插入视频

在 html 中插入视频可通过两种方法实现:使用 标签,指定视频路径和类型。嵌入 youtube 视频,使用 标签并提供视频 url。HTML 如何插入视频在 HTML 中插入视频可以增强您的网页,让它们更具吸引力并提供丰富的用户体验
html怎么插入视频
2024-05-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录