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]].
思路是把新的区间和显存区间一个个比,并且更新行的区间:
/**
* Definition of Interval:
* class Interval {
* public:
* int start, end;
* Interval(int start, int end) {
* this->start = start;
* this->end = end;
* }
* }
*/
class Solution {
public:
/**
* Insert newInterval into intervals.
* @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
if (intervals.size() == 0) {
intervals.push_back(newInterval);
return intervals;
}
if (newInterval.end < intervals[0].start) {
intervals.insert(intervals.begin(), newInterval);
return intervals;
}
if (newInterval.start > intervals.back().end) {
intervals.push_back(newInterval);
return intervals;
}
vector<Interval> res;
res.push_back(newInterval);
int len = intervals.size();
for (int i = 0; i < len; i++) {
res.erase(res.begin()+res.size()-1);
if (intervals[i].end < newInterval.start) {
res.push_back(intervals[i]);
res.push_back(newInterval);
continue;
}
if (newInterval.end < intervals[i].start) {
res.push_back(newInterval);
for (int j = i; j < len; j++)
res.push_back(intervals[j]);
break;
}
newInterval.start = min(newInterval.start, intervals[i].start);
newInterval.end = max(newInterval.end, intervals[i].end);
res.push_back(newInterval);
}
return res;
}
};