Wednesday, October 16, 2013

Insert Interval [Leetcode]

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].

Solution: first insert the intervals in front of newInterval directly, then add the new Interval (we may need to update the newInterval since the input intervals may overlap with newInterval), then add the intervals behind updated newInterval.

/**
 * Definition for an interval.
 * struct Interval {
 *     int start;
 *     int end;
 *     Interval() : start(0), end(0) {}
 *     Interval(int s, int e) : start(s), end(e) {}
 * };
 */
class Solution {
public:
    vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        vector<Interval> ret;
        if(intervals.empty()){
            ret.push_back(newInterval);
            return ret;
        }
        int i;
        for(i=0; i<intervals.size() && intervals[i].start<=newInterval.end; i++){
            //inser the intervals in front of newInterval
            if(intervals[i].end<newInterval.start)
                ret.push_back(intervals[i]);
            else{
                //update the newInterval
                newInterval.start = min(newInterval.start, intervals[i].start);
                newInterval.end = max(newInterval.end, intervals[i].end);
            }
        }
        //insert the newInterval
        ret.push_back(newInterval);
        //insert the rest of intervals, i.e., the intervals behind the "newInterval"
        ret.insert(ret.end(), intervals.begin()+i, intervals.end());
        return ret;
    }
}; 

No comments:

Post a Comment