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]
.
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct Interval {
int start;
int end;
Interval() : start(0), end(0) {}
Interval(int s, int e) : start(s), end(e) {}
};
struct interval_less:public binary_function<const Interval,const Interval,bool>
{
bool operator()(const Interval A,const Interval B){
return A.start<B.start;
}
};
vector<Interval> merge(vector<Interval> &intervals) {
if (intervals.size()<=1)
return intervals;
vector<Interval> Result ;
sort(intervals.begin(),intervals.end(),interval_less());
Interval Cur_interval = *intervals.begin();
vector<Interval>::iterator Nex_interval = intervals.begin()+1;
while (Nex_interval!=intervals.end())
{
if ((*Nex_interval).start<=Cur_interval.end)
Cur_interval = Interval(Cur_interval.start,max((*Nex_interval).end,Cur_interval.end));
else{
Result.push_back(Cur_interval);
Cur_interval = *(Nex_interval);
}
Nex_interval++;
}
Result.push_back(Cur_interval);
return Result;
}