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]
./**Passed both small and large tests. * Be especially careful with the coundary cases * * 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) { // Start typing your C/C++ solution below // DO NOT write int main() function if (intervals.empty()) return vector<Interval>(1,newInterval);//base case 0 int index1 = 0; for(; index1 < intervals.size(); ++index1){ if (intervals[index1].start > newInterval.start) break; } if (index1){ --index1; if (newInterval.start <= intervals[index1].end){//merge newInterval.start = intervals[index1].start; }else ++index1;//inclusive } int index2 = index1;//index2 >= 0 for(; index2 < intervals.size(); ++index2){ if (intervals[index2].end > newInterval.end) break; } if (index2 != intervals.size()){ if (newInterval.end >= intervals[index2].start){ newInterval.end = intervals[index2].end; ++index2;//skip the element } } vector<Interval> result(intervals.begin(),intervals.begin()+index1); result.push_back(newInterval); if (index2 <= intervals.size()) result.insert(result.end(),intervals.begin()+index2, intervals.end()); return result; } };
No comments:
Post a Comment