您的位置:首页 > 文旅 > 旅游 > 网站制作案例策划_品牌营销和市场营销的区别_成都自然排名优化_今日头条新闻头条

网站制作案例策划_品牌营销和市场营销的区别_成都自然排名优化_今日头条新闻头条

2024/12/23 10:41:45 来源:https://blog.csdn.net/sjsjs11/article/details/142309460  浏览:    关键词:网站制作案例策划_品牌营销和市场营销的区别_成都自然排名优化_今日头条新闻头条
网站制作案例策划_品牌营销和市场营销的区别_成都自然排名优化_今日头条新闻头条

给你一个 无重叠的 ,按照区间起始端点排序的区间列表 intervals,其中 intervals[i] = [starti, endi] 表示第 i 个区间的开始和结束,并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval = [start, end] 表示另一个区间的开始和结束。

在 intervals 中插入区间 newInterval,使得 intervals 依然按照 starti 升序排列,且区间之间不重叠(如果有必要的话,可以合并区间)。

返回插入之后的 intervals。

注意 你不需要原地修改 intervals。你可以创建一个新数组然后返回它。

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

在这里插入图片描述

扫描线

class Solution {
public:vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {vector<vector<int>> answer;int left = newInterval[0], right = newInterval[1];bool placed = false;for(auto interval : intervals){//区间在插入区间右侧if(interval[0] > right){if(!placed){answer.push_back({left, right});placed = true;}answer.push_back(interval);}else if(interval[1] < left){answer.push_back(interval);}else{left = min(left, interval[0]);right = max(right, interval[1]);}}if(!placed){answer.push_back({left, right});}return answer;}
};

这道题涉及到合并区间。我们首先遍历数组intervals,当某个区间和插入区间没有交集的时候,就直接push他,当有交集的时候,我们就要可以将这些区间和插入区间进行合并。

我们还设定了一个布尔值placed来判断这个区间的放置位置,当插入区间的最右边端点在遍历的区间的左侧的时候,那么这时候就不进行合并操作,就要将插入区间push,并且设置placed为true,然后再push遍历到的区间。

还有一种情况,插入区间的最右端点较大,以至于到最后一个区间进行的也是合并操作,这时候遍历结束,直接push经过合并的插入区间。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com