先将区间按照左区间的大小从小到大排序(没太看懂库函数sort的第三个参数的用法,自己写的cmp函数会报错)然后遍历数组只需对比每个区间的左区间与现有的右界的大小,将结果push进res中
struct Interval {
int start;
int end;
Interval() : start(0), end(0) {}
Interval(int s, int e) : start(s), end(e) {}
};
vector<Interval> merge(vector<Interval>& intervals) {
if(intervals.size()==0)return {};
vector<Interval> res;
sort(intervals.begin(),intervals.end(),[](Interval &a,Interval &b){return a.start<b.start;});
int s = intervals[0].start,e = intervals[0].end;
for(int i=1;i<intervals.size();i++)
{
if(intervals[i].start<=e)
{
if(intervals[i].end>e)
e = intervals[i].end;
}
else
{
Interval temp(s,e);
res.push_back(temp);
s = intervals[i].start;
e = intervals[i].end;
}
}
Interval temp(s,e);
res.push_back(temp);
return res;
}