由于insert和erase代價太大,需要移動后面所有元素。
所有空間換時間,返回新的數(shù)組ret,而不采用inplace做法。
主要以下三種情況:
1、newInterval與當(dāng)前interval沒有交集,則按照先后次序加入newInterval和當(dāng)前interval,然后裝入所有后續(xù)interval。返回ret。
2、newInterval與當(dāng)前interval有交集,合并成為新的newInterval,然后處理后續(xù)interval。
3、處理完最后一個interval若仍未返回ret,說明newInterval為最后一個interval,裝入ret。返回ret。
class Solution {
public:
vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) {
vector<Interval> ret;
if(intervals.empty())
{
ret.push_back(newInterval);
return ret;
}
int i = 0;
while(i < intervals.size())
{
//no overlapping
if(newInterval.end < intervals[i].start)
{
ret.push_back(newInterval);
while(i < intervals.size())
{
ret.push_back(intervals[i]);
i ++;
}
return ret;
}
else if(newInterval.start > intervals[i].end)
ret.push_back(intervals[i]);
//overlapping
else
{
newInterval.start = min(newInterval.start, intervals[i].start);
newInterval.end = max(newInterval.end, intervals[i].end);
}
i ++;
}
ret.push_back(newInterval);
return ret;
}
};