Insert Interval

Description:

Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).

You may assume that the intervals were initially sorted according to their start times.

Example 1:
Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].

Example 2:
Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].

This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].

Code:

vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {
         vector<Interval>result;
        int low = 0, high = intervals.size()-1;
        while (low <= high)
        {
            int mid = (low+high)/2;
            if (intervals[mid].start<=newInterval.start)
                low = mid+1;
            else
                high = mid-1;
        }
        vector<Interval>::iterator itr = intervals.begin();
        intervals.insert(itr+low, newInterval);//在迭代器前插入,即在第low+1个元素前插入
        
        result.push_back(intervals[0]);
        for (int i = 1; i < intervals.size(); ++i)
        {
            int temp = result.size();
            if (intervals[i].start <= result[temp-1].end)
                result[temp-1].end = max(intervals[i].end,result[temp-1].end);
            else
                result.push_back(intervals[i]);
        }
        return result;
    }

原文地址:https://www.cnblogs.com/happygirl-zjj/p/4748264.html