Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].
/**
* 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:
static bool comp(const Interval& lhs, const Interval& rhs){
return lhs.start < rhs.start;
}
vector<Interval> merge(vector<Interval>& intervals) {
int size = intervals.size();
vector<Interval> ans;
if(size == 0) return ans;
sort(intervals.begin(), intervals.end(), comp);
ans.push_back(intervals[0]);
for(int i = 1; i < size; ++i){
int sz = ans.size();
// [1, 3] [2, 6]
if(ans[sz - 1].start <= intervals[i].start && intervals[i].start <= ans[sz - 1].end){
if(ans[sz - 1].end < intervals[i].end){
ans[sz - 1].end = intervals[i].end;
} else if(ans[sz - 1].end >= intervals[i].end)
continue;
} else if(ans[sz - 1].end < intervals[i].start)
ans.push_back(intervals[i]);
}
return ans;
}
};