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