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;