插入区间(C++解法)

编程入门 行业动态 更新时间:2024-10-10 06:16:56

插入区间(C++<a href=https://www.elefans.com/category/jswz/34/1764302.html style=解法)"/>

插入区间(C++解法)

题目

给你一个 无重叠的 ,按照区间起始端点排序的区间列表。

在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

示例 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] 重叠。

示例 3:

输入:intervals = [], newInterval = [5,7]
输出:[[5,7]]

示例 4:

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

示例 5:

输入:intervals = [[1,5]], newInterval = [2,7]
输出:[[1,7]]

C++代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;/*
* 插入区间问题,将新区间插入并排序
* 第一个区间放在新二维数组里,遍历其他的区间与这个区间进行比较
* 如果左数小于等于第一个区间的右数,更新较大的右数
* 否则直接插入区间
*/
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {vector<vector<int>> ans;intervals.push_back(newInterval);sort(intervals.begin(), intervals.end());ans.push_back(intervals[0]);for (int i = 1; i < intervals.size(); ++i) {if (intervals[i][0] <= ans.back()[1]) {ans.back()[1] = max(ans.back()[1], intervals[i][1]);}else {ans.push_back(intervals[i]);}}return ans;
}int main() {vector<vector<int>> intervals = { {1,3},{6,9} };vector<int> newInterval = { 2,5 };vector<vector<int>> ans = insert(intervals, newInterval);for (int i = 0; i < ans.size(); ++i) {for (int j = 0; j < ans[i].size(); ++j) {cout << ans[i][j] << " ";}cout << endl;}return 0;
}

分析

插入区间问题,将新区间插入并排序,第一个区间放在新二维数组里,遍历其他的区间与这个区间进行比较。如果左数小于等于第一个区间的右数,更新较大的右数,否则直接插入区间。

更多推荐

插入区间(C++解法)

本文发布于:2023-12-03 22:59:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1658671.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:解法   区间

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!