//给定一个无重叠的,按照区间起点升序排列的区间列表,在列表中插入一个新区间,如果有原区间有重合,则合并,请返回插入后的区间列表。
//数据范围:区间列表长度满足0-10^4, 区间的左右端点满足0 <= l,r <= 10^5
//该实现性能够了,但不够简洁
vector<Interval> insertInterval(vector<Interval>& Intervals, Interval newInterval)
{
int start = newInterval.start;//记录新区间的开始点
int end = newInterval.end;//记录新区间的结束点
size_t length = Intervals.size();
vector<Interval> result;
size_t i = 0;//记录当前迭代到哪个区间点
size_t p = 0;//记录新区间的插入点
for (; i < length; i++)//把前面与新区间不重叠的区间直接放置至结果数组
{
if (Intervals[i].end < start)
{
result.push_back(std::move(Intervals[i]));
}
else
{
break;
}
}
if (i < length)
{
if (start > Intervals[i].start)//找出最早开始点
{
start = Intervals[i].start;
p = i;
}
for (; i < length; i++)//找出最后结束点和加入剩下重叠的区间
{
if (Intervals[i].start <= end)
{
if (Intervals[i].end > end)
end = Intervals[i].end;
}
else
{
result.push_back(std::move(Intervals[i]));
}
}
}
result.emplace(result.begin() + p, start, end);//插入新区间
return std::move(result);
}