[LeetCode] 57. Insert Interval 插入区间

[LeetCode] 57. Insert Interval 插入区间

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

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

Example1:

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

Example2:

输入: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] 重叠。

大致思路

用一个变量 cur 来遍历区间,如果当前 cur 区间的结束位置小于要插入的区间的起始位置的话,说明没有重叠,则将 cur 区间加入结果 res 中,然后 cur 自增1。直到有 cur 越界或有重叠 while 循环退出,然后再用一个 while 循环处理所有重叠的区间,每次用取两个区间起始位置的较小值,和结束位置的较大值来更新要插入的区间,然后 cur 自增1。

AC代码

	int n = intervals.size();
		int cur = 0;
		vector<vector<int>> res;
		while (cur < n&&intervals[cur][1] < newInterval[0])
		{
			res.push_back(intervals[cur]);
			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]);
			cur++;
		}
		return res;
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页