返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++怎么合并区间
  • 383
分享到

C++怎么合并区间

2023-06-20 15:06:47 383人浏览 薄情痞子
摘要

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

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

合并区间

Given a collection of intervals, merge all overlapping intervals.

Example 1:

Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].

Example 2:

Input: [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.

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

这道和之前那道 Insert Interval 很类似,这次题目要求我们合并区间,之前那题明确了输入区间集是有序的,而这题没有,所以我们首先要做的就是给区间集排序,由于我们要排序的是个结构体,所以我们要定义自己的 comparator,才能用 sort 来排序,我们以 start 的值从小到大来排序,排完序我们就可以开始合并了,首先把第一个区间存入结果中,然后从第二个开始遍历区间集,如果结果中最后一个区间和遍历的当前区间无重叠,直接将当前区间存入结果中,如果有重叠,将结果中最后一个区间的 end 值更新为结果中最后一个区间的 end 和当前 end 值之中的较大值,然后继续遍历区间集,以此类推可以得到最终结果,代码如下:

解法一:

class Solution {public:    vector<vector<int>> merge(vector<vector<int>>& intervals) {        if (intervals.empty()) return {};        sort(intervals.begin(), intervals.end());        vector<vector<int>> res{intervals[0]};        for (int i = 1; i < intervals.size(); ++i) {            if (res.back()[1] < intervals[i][0]) {                res.push_back(intervals[i]);            } else {                res.back()[1] = max(res.back()[1], intervals[i][1]);            }        }           return res;    }};

下面这种解法将起始位置和结束位置分别存到了两个不同的数组 starts 和 ends 中,然后分别进行排序,之后用两个指针i和j,初始化时分别指向 starts 和 ends 数组的首位置,然后如果i指向 starts 数组中的最后一个位置,或者当 starts 数组上 i+1 位置上的数字大于 ends 数组的i位置上的数时,此时说明区间已经不连续了,我们来看题目中的例子,排序后的 starts 和 ends 为:

starts:    1    2    8    15

ends:     3    6    10    18

红色为i的位置,蓝色为j的位置,那么此时 starts[i+1] 为8,ends[i] 为6,8大于6,所以此时不连续了,将区间 [starts[j], ends[i]],即 [1, 6] 加入结果 res 中,然后j赋值为 i+1 继续循环,参见代码如下:

解法二:

class Solution {public:    vector<vector<int>> merge(vector<vector<int>>& intervals) {        int n = intervals.size();        vector<vector<int>> res;        vector<int> starts, ends;        for (int i = 0; i < n; ++i) {            starts.push_back(intervals[i][0]);            ends.push_back(intervals[i][1]);        }        sort(starts.begin(), starts.end());        sort(ends.begin(), ends.end());        for (int i = 0, j = 0; i < n; ++i) {            if (i == n - 1 || starts[i + 1] > ends[i]) {                res.push_back({starts[j], ends[i]});                j = i + 1;            }        }         return res;    }};

这道题还有另一种解法,这个解法直接调用了之前那道题 Insert Interval 的函数,由于插入的过程中也有合并的操作,所以我们可以建立一个空的集合,然后把区间集的每一个区间当做一个新的区间插入结果中,也可以得到合并后的结果,那道题中的四种解法都可以在这里使用,但是没必要都列出来,这里只选了那道题中的解法二放到这里,代码如下:

解法三:

class Solution {public:    vector<vector<int>> merge(vector<vector<int>>& intervals) {        vector<vector<int>> res;        for (int i = 0; i < intervals.size(); ++i) {            res = insert(res, intervals[i]);        }        return res;    }    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;    }};

到此,相信大家对“C++怎么合并区间”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: C++怎么合并区间

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

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

猜你喜欢
  • C++怎么合并区间
    本篇内容主要讲解“C++怎么合并区间”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么合并区间”吧!合并区间Given a collection of intervals, merge a...
    99+
    2023-06-20
  • python怎么合并区间
    在python中利用遍历对区间进行合并,具体方法如下:def merge(self, intervals: List[List[int]]) -> List[List[int]]:if len(intervals) = x[0]:mid[1...
    99+
    2024-04-02
  • C++实现LeetCode(56.合并区间)
    [LeetCode] 56. Merge Intervals 合并区间 Given a collection of intervals, merge all overlapping ...
    99+
    2024-04-02
  • C语言题解Leetcode56合并区间实例
    目录解题思路解题遇到的问题后续需要总结学习的知识点解题思路 题目链接 56. 合并区间 本质在于两两做对比,如果两个区间,可以合并,则为结果二维数组中的一员,如果不可合...
    99+
    2023-01-05
    C语言 Leetcode合并区间 C语言合并区间
  • win10怎么合并分区
    今天小编给大家分享一下win10怎么合并分区的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。win10合并分区的步骤右键点击“...
    99+
    2023-07-01
  • C++怎么插入区间
    本篇内容介绍了“C++怎么插入区间”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!插入区间Given a set of non-ov...
    99+
    2023-06-20
  • win10怎么合并硬盘分区
    在Windows 10中,可以使用磁盘管理工具来合并硬盘分区。以下是合并分区的步骤:1. 按下 Win + X 键,然后选择“磁盘管...
    99+
    2023-10-08
    win10
  • c语言怎么合并代码
    c 语言中合并代码的方法有 4 种:预处理指令(#include)、函数库(#pragma)、命令行编译器选项(-i)、ide 内置功能。预处理指令用于包含其他源文件,函数库用于将相关函...
    99+
    2024-05-21
    c语言
  • win10中怎么无损合并分区
    这篇文章主要介绍了win10中怎么无损合并分区,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法:首先按下键盘上的“win+x”键,将要被合并的分区上单击右键,选择“删除卷”...
    99+
    2023-06-15
  • C++11引用合并怎么实现
    本篇内容介绍了“C++11引用合并怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实参推断考虑下面的模板函数和调用代码。对于前两种情况...
    99+
    2023-06-19
  • C#怎么实现PDF页面合并
    这篇文章主要介绍了C#怎么实现PDF页面合并的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#怎么实现PDF页面合并文章都会有所收获,下面我们一起来看看吧。程序环境方法1在程序中引入Spire.Pdf.dll文...
    99+
    2023-06-30
  • win10电脑硬盘怎么合并分区
    有的朋友认为自己的电脑硬盘分区过多,想将win10电脑合区,那么win10电脑硬盘怎么合并分区呢?win10的硬盘分区是可以使用自带程序完成的,这就减少了操作难度,下面小编给大家介绍一下怎么自己动手合并磁盘分区。一起来看看win10电脑硬盘...
    99+
    2023-07-10
  • PHP数组合并中的深度合并和浅层合并有什么区别?
    php 中合并数组有两种方法:深度合并和浅层合并。深度合并递归遍历数组,合并标量值和进行数组的深度合并。浅层合并仅逐个元素复制数组,后面的数组值覆盖前面的值,数组作为整体复制到结果中。 ...
    99+
    2024-04-28
    浅层合并 深层合并
  • c语言中区间怎么表示
    c 语言中区间表示使用方括号,左侧表示左端点,右侧表示右端点。区间类型包括包含端点的闭区间、不包含端点的开区间以及半开半闭区间。c 语言提供了区间合并、减法、交集、余集等运算符。通过示例...
    99+
    2024-05-02
    c语言
  • 阿里云服务器怎么合并分区
    简介 在阿里云服务器上,有时候我们需要对分区进行合并操作,以提高服务器的性能和存储空间利用率。本文将介绍如何在阿里云服务器上合并分区。步骤1. 登录到阿里云服务器首先,使用 SSH 客户端登录到你的阿里云服务器。你可以使用 PuTTY 或者...
    99+
    2024-01-30
    阿里 分区 服务器
  • C#的Null合并运算符怎么用
    本篇内容主要讲解“C#的Null合并运算符怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#的Null合并运算符怎么用”吧!Null 合并运算符( )Null 合并运算符用于定义可空类型...
    99+
    2023-06-17
  • C#中怎么合并多个WORD文档
    C#中怎么合并多个WORD文档,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。今天因为客户需要,需要将多个WORD文档合并成为一个WORD文档。其中,对WORD文...
    99+
    2023-06-17
  • 怎么实现MyISAM分区表迁移及合并
    这期内容当中小编将会给大家带来有关怎么实现MyISAM分区表迁移及合并,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 dyn_change_...
    99+
    2024-04-02
  • C++怎么合并两个排序的链表
    本篇内容主要讲解“C++怎么合并两个排序的链表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么合并两个排序的链表”吧!题目描述:输入两个递增的链表,单个链表的长度为n,合并这两个链表并使...
    99+
    2023-06-22
  • C#怎么合并多个连续空格符
    C#怎么合并多个连续空格符,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。我们使用正则表达式来实现合并多个连续C#空格符,类Regex 的名称空间是:System.Text....
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作