C++ 插入区间
//给定一个无重叠的,按照区间起点升序排列的区间列表,在列表中插入一个新区间,如果有原区间有重合,则合并,请返回插入后的区间列表。 //数据范围:区间列表长度满足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); }