Sort the intervals in ascending order of start. Let the tmp denote the first interval, iterate the later intervals to compare:
If start>tmp.start: push tmp into result, replace tmp with the current interval;
Else if end>tmp.end: update tmp.end = end;
/**
* 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) {
vector<Interval> result;
Interval tmp;
if(intervals.size()==0) return result;
sort(intervals.begin(),intervals.end(),less);
tmp = intervals[0];
for(int i=1;i<intervals.size();i++) {
if(intervals[i].start>tmp.end) {
result.push_back(tmp);
tmp = intervals[i];
}
else {
if(intervals[i].end<=tmp.end) continue;
else tmp.end = intervals[i].end;
}
}
result.push_back(tmp);
return result;
}
static bool less(const Interval &a, const Interval &b) {
return a.start<b.start;
}
};