思路:先排序,以左端点小的放在前面,左端点相同,就以右端点大的放后面。所以记得重载cmp函数
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
//重载sort函数的cmp函数
//以左端点从小到大排序,但如果左端点相同就以右端点从小到大来排序
bool cmp(const Interval & a, const Interval & b){
if(a.start < b.start)
return 1;
else if(a.start == b.start )
return a.end < b.end;
else
return 0;
}
class Solution {
public:
vector<Interval> merge(vector<Interval> &intervals) {
vector<Interval>res;
sort(intervals.begin(), intervals.end(), cmp);
int n = intervals.size();
int pre = 0, step = pre +1;
while(pre < n){//合并区间
//找pre的右端点
while(step <n && intervals[pre].end >= intervals[step].start){
if(intervals[pre].end < intervals[step].end){
intervals[pre].end = intervals[step].end;
}
step++;
}
res.push_back (intervals[pre]);
pre = step;//pre指向下一个合并的区间
}
return res;
}
};