描述
Given a non-overlapping interval list which is sorted by start point.
Insert a new interval into it, make sure the list is still in order and non-overlapping
(merge intervals if necessary).
您在真实的面试中是否遇到过这个题?
是
样例
Insert (2, 5)
into [(1,2), (5,9)]
, we get [(1,9)].
Insert (3, 4)
into [(1,2), (5,9)]
, we get [(1,2), (3,4), (5,9)]
.
注意区间可能落在,已存在元素的范围内,例如:(3,7)插入[(1,2),(5,9)]
我开始的代码思路不太流畅,这个思路相对清晰,先修改要插入的元素的start end 最后统一删除容器中需要删除的元素。
/** * Definition of Interval: * class Interval { * public: * int start, end; * Interval(int start, int end) { * this->start = start; * this->end = end; * } * } */ class Solution { public: /* * @param intervals: Sorted interval list. * @param newInterval: new interval. * @return: A new interval list. */ vector<Interval> insert(vector<Interval> intervals, Interval newInterval) { // write your code here int count = 0; int i = 0; while(i < intervals.size()){ if(newInterval.end < intervals[i].start) break; else if(newInterval.start > intervals[i].end) ++i; else{ newInterval.start = min(intervals[i].start,newInterval.start); newInterval.end = max(intervals[i].end,newInterval.end); ++i; ++count; } } if(count > 0) intervals.erase(intervals.begin()+i-count,intervals.begin()+i); intervals.insert(intervals.begin()+i-count,newInterval); return intervals; } };