首先根据每个区间的起始位置值进行排序,然后遍历排序好的所有区间,设置一个活跃区间cur,并与下一个区间的范围进行比较,当可以扩展cur时对cur进行扩展,否则将cur加入到结果中。注意遍历完之后还剩一个区间,也要加入到结果集中。
/**
* 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{};
if(intervals.empty()) return result;
auto cmp=[](Interval& a,Interval& b){return a.start<b.start;};
sort(intervals.begin(),intervals.end(),cmp);
Interval cur=intervals[0];
for(int i=1;i<intervals.size();i++){
if(cur.end>=intervals[i].start){
if(cur.end<intervals[i].end) cur.end=intervals[i].end;
}
else{
result.push_back(cur);
cur.start=intervals[i].start;
cur.end=intervals[i].end;
}
}
result.push_back(cur);
return result;
}
};