iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++怎么插入区间
  • 626
分享到

C++怎么插入区间

2023-06-20 16:06:00 626人浏览 独家记忆
摘要

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

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

--结束END--

本文标题: C++怎么插入区间

本文链接: https://www.lsjlt.com/news/298187.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • C++怎么插入区间
    本篇内容介绍了“C++怎么插入区间”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!插入区间Given a set of non-ov...
    99+
    2023-06-20
  • C++实现LeetCode(57.插入区间)
    [LeetCode] 57. Insert Interval 插入区间 Given a set of non-overlapping intervals, ins...
    99+
    2024-04-02
  • sql怎么插入时间
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-30
  • 【每日一题】57. 插入区间
    【每日一题】57. 插入区间 57. 插入区间题目描述解题思路 57. 插入区间 题目描述 给你一个 无重叠的 ,按照区间起始端点排序的区间列表。 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要...
    99+
    2023-08-30
    leetcode 算法 职场和发展
  • mysql怎么插入时间属性
    mysql插入时间属性的示例:例如给test插入时间属性time的方法。Query OK, 1 row affected (0.11 sec)Records: 1&nbs...
    99+
    2024-04-02
  • C++怎么合并区间
    本篇内容主要讲解“C++怎么合并区间”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么合并区间”吧!合并区间Given a collection of intervals, merge a...
    99+
    2023-06-20
  • C#中怎么向Excel插入数据
    本篇文章给大家分享的是有关C#中怎么向Excel插入数据,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。调用方法:MengXianhui.Utility.ExcelReport....
    99+
    2023-06-18
  • MySQL插入时间差八小时怎么办
    这篇文章给大家分享的是有关MySQL插入时间差八小时怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。解决MySQL插入时间差八小时问题一般 jdbc url中 需要添加几个参...
    99+
    2024-04-02
  • C++怎么实现链表插入排序
    本篇内容主要讲解“C++怎么实现链表插入排序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么实现链表插入排序”吧!链表插入排序链表的插入排序实现原理很简单,就是一个元素一个元素的从原链表...
    99+
    2023-06-20
  • Python面向对象编程之区间的插入详解
    目录一、面向对象编程的Python实例描述二、面向对象编程的Python实例的示例三、面向对象编程的Python实例的编写过程3.1 本文的集成编译环境3.2 编写Interval类...
    99+
    2024-04-02
  • c语言中区间怎么表示
    c 语言中区间表示使用方括号,左侧表示左端点,右侧表示右端点。区间类型包括包含端点的闭区间、不包含端点的开区间以及半开半闭区间。c 语言提供了区间合并、减法、交集、余集等运算符。通过示例...
    99+
    2024-05-02
    c语言
  • C语言插入排序
    前言: 本文主要讲解插入排序中的直接插入排序和希尔排序。 1、直接插入排序: 1.1基本思想 直接插入排序是一种简单的插入排序法,其基本思想是把待排序的数值按照大小顺序逐个插入到一个已经排好序的有序序列中,直到将所有记录插入完为止,得到一个...
    99+
    2023-09-28
    c语言 排序算法 数据结构
  • c++怎么清空输入缓冲区
    在C++中,你可以使用cin.ignore()来清空输入缓冲区。它会忽略掉缓冲区中剩余的所有字符,直到换行符为止。以下是一个示例代码...
    99+
    2023-10-23
    c++
  • pycharm怎么插入python
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-22
  • sql注入怎么插入语句
    sql注入中插入语句的语法格式为:Insert into 表名(字段1,字段2,字段3,...)values (值1,值2,值3...);示例://插入一个user用户表,字段有id、name,值为1和linInsert into 'use...
    99+
    2024-04-02
  • html怎么插入图片
    小编给大家分享一下html怎么插入图片,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! <img src="目标文件路径及全称" alt="图片替换文本...
    99+
    2024-04-02
  • Css怎么插入图片
    小编给大家分享一下Css怎么插入图片,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!css的全称是什么css的全称是Cascading Style Sheets(层...
    99+
    2023-06-14
  • mysql date怎么插入null
    这篇文章给大家分享的是有关mysql date怎么插入null的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql date插入null的方法:首先连接到MySQL服务器;然...
    99+
    2024-04-02
  • redis怎么循环插入
    redis循环插入的方法:写一个shell脚本,如:for((i=1;i> /tmp/_t.txtdonelinux或者windows上生成的文件不能直接当做redis语句来跑,因此需要转换。方法:用vim,使用方式:#vim file.t...
    99+
    2024-04-02
  • ppt怎么插入页码
    ppt插入页码的方法:1、使用母板视图插入页码;2、在幻灯片底部插入页码;3、使用页眉/页脚功能插入页码。PPT(Microsoft PowerPoint)是一款常用的演示文稿制作工具,常用于会议、教育、培训等场合。在制作演示文稿时,页码通...
    99+
    2023-07-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作