您的位置:首页 > 其它

Leetcode 57. Insert Interval

2018-02-03 08:28 239 查看
原题:

Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).

You may assume that the intervals were initially sorted according to their start times.

Example 1:

Given intervals
[1,3],[6,9]
, insert and merge
[2,5]
in as
[1,5],[6,9]
.

Example 2:

Given
[1,2],[3,5],[6,7],[8,10],[12,16]
, insert and merge
[4,9]
in as
[1,2],[3,10],[12,16]
.

This is because the new interval
[4,9]
overlaps with
[3,5],[6,7],[8,10]
.

解决方法:
很有意思的一道题。直接从原数值中取出区间,

- 如果该区间跟新区间有重叠,将该区间合并到新区间上;

- 如果新区间在该区间的前面,则先后插入新区间 和该区间;

- 如果该区间跟新区间不重叠,则直接加入到结果集中。

代码:
vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {
int n = intervals.size();
bool inserted = false;
vector<Interval> res;
for(auto i: intervals){
if (inserted){
res.push_back(i);
continue;
}
if (i.end < newInterval.start){
res.push_back(i);
}
else if (i.start > newInterval.end){
res.push_back(newInterval);
inserted = true;
res.push_back(i);
}else{
newInterval.start = min(newInterval.start, i.start);
newInterval.end = max(newInterval.end, i.end);
}
}

if (!inserted)
res.push_back(newInterval);

return res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C Leetcode