auto compare = [] (const Interval &intv1, const Interval &intv2)
{ return intv1.end < intv2.start; };
auto range = equal_range(intervals.begin(), intervals.end(), newInterval, compare);
auto itr1 = range.first, itr2 = range.second;
if (itr1 == itr2) {
intervals.insert(itr1, newInterval);
} else {
itr2--;
itr2->start = min(newInterval.start, itr1->start);
itr2->end = max(newInterval.end, itr2->end);
intervals.erase(itr1, itr2);
}
return intervals;
这道题我本科的时候肯定做过,现如今真的变笨了
int left=0,right=intervals.size();
for(int i=0;i<intervals.size();i++)
if(newInterval.start>intervals[i].end)
left=i+1;
for(int i=intervals.size()-1;i>=0;i--)
if(newInterval.end<intervals[i].start)
right=i; //the right is the one after the last one
//if the new interval is in the head,then insert as new head
if(right==0)
{
intervals.insert(intervals.begin(),newInterval);
return intervals;
}
//if the new interval is in the tail,then insert as new tail
if(left==intervals.size())
{
intervals.insert(intervals.end(),newInterval);
return intervals;
}
//construct the newinterval
newInterval.start=min(newInterval.start,intervals[left].start);
newInterval.end=max(newInterval.end,intervals[right-1].end);
//firt erase the old intervals,then insert one new interval
intervals.erase(intervals.begin()+left,intervals.begin()+right);
intervals.insert(intervals.begin()+left,newInterval);
return intervals;
浙公网安备 33010602011771号