Insert Interval

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

思路:遍历,判断中间的状态:

        ---(------------------------------------

                                  {----------------------------}  newInterval

class Solution {
public:
    vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) {
        bool done = false;
        vector<Interval> ans;
        int start = newInterval.start;
        int end = newInterval.end;
        
        for(int i = 0; i < intervals.size(); i++){
            //左边没有重合的部分
            if (intervals[i].end < newInterval.start){
                ans.push_back(intervals[i]);
            }else if (intervals[i].start > newInterval.end){ //右边没有重合的部分
                if (!done){
                    ans.push_back(Interval(start,end));
                    done = true;
                }
                ans.push_back(intervals[i]);
            }else{ //中间肯定有重合
                start = min(start,intervals[i].start);
                end = max(end,intervals[i].end);
            }
        }
        if (!done){
            ans.push_back(Interval(start,end));
        }
        return ans;
    }
};

 

posted @ 2013-06-30 11:43  一只会思考的猪  阅读(175)  评论(0编辑  收藏  举报