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; } };