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:
Input: intervals = [[1,3],[6,9]], newInterval = [2,5] Output: [[1,5],[6,9]]
Example 2:
Input: intervals =[[1,2],[3,5],[6,7],[8,10],[12,16]]
, newInterval =[4,8]
Output: [[1,2],[3,10],[12,16]] Explanation: Because the new interval[4,8]
overlaps with[3,5],[6,7],[8,10]
.
/** * 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) { vector<Interval>::iterator it; for(it=intervals.begin(); it!=intervals.end(); ) { if(it->start > newInterval.end) { intervals.insert(it,newInterval); return intervals; } else if(it->end < newInterval.start) it++; else { newInterval.start=min(newInterval.start,it->start); newInterval.end=max(newInterval.end,it->end); it=intervals.erase(it); } } intervals.insert(it,newInterval); return intervals; } };
56. Merge Intervals
Given a collection of intervals, merge all overlapping intervals.
Example 1:
Input: [[1,3],[2,6],[8,10],[15,18]] Output: [[1,6],[8,10],[15,18]] Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
Example 2:
Input: [[1,4],[4,5]] Output: [[1,5]] Explanation: Intervals [1,4] and [4,5] are considerred overlapping.
/** * 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> merge(vector<Interval>& intervals) { int n=intervals.size(); if(n<=1) return intervals; sort(intervals.begin(),intervals.end(),cmp); vector<Interval> res; for(auto interval : intervals) { if(res.empty() || res.back().end<interval.start) res.push_back(interval); else res.back().end=max(res.back().end,interval.end); } return res; } static bool cmp(const Interval& a, const Interval& b) { return a.start < b.start || (a.start == b.start && a.end < b.end); } };
56
.
Merge Intervals
57
.
Insert Interval