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:
/*algorithm sort + merge
1)for interval[begin,end], sort first by begin , if same, by end
2)merge
time O(n*lgn)
*/
struct cmp {
bool operator()(const Interval& l,const Interval &r){
return l.start < r.start;
}
} myCmp;
vector<Interval> merge(vector<Interval>& intervals) {
vector<Interval>ret;
if(intervals.size() < 1)return ret;
sort(intervals.begin(),intervals.end(),myCmp);
intervals.push_back(Interval(INT_MAX,INT_MAX));//add as mark end
Interval cur = intervals[0];
for(int i = 1;i < intervals.size();i++){
//merge window if overlap
if(cur.end >= intervals[i].start){
cur.start = min(cur.start,intervals[i].start);
cur.end = max(cur.end,intervals[i].end);
}else{ //no overlap
ret.push_back(cur);
cur = intervals[i];
}
}
return ret;
}
};