57. Insert Interval

由于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;
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容