/**
* Definition foran interval.
* struct Interval{
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e){}
* };
*/
vector<Interval> comp(Intervala,Interval b,vector<Interval>& tmp)
{
//a<b
if(a.end<b.start)
{
tmp.push_back(a);
tmp.push_back(b);
returntmp;
}
//a>b
if(a.end>=b.end)
{
tmp.push_back(a);
return tmp;
}
//a--b
if(a.end<b.end)
{
Intervalret;
ret.start=a.start;
ret.end=b.end;
tmp.push_back(ret);
returntmp;
}
}
voidquicksort(vector<Interval>& intervals,int start,int end)
{
if(start>=end) return;
intk=start,cur=intervals[start].start;
for(inti=start+1;i<=end;i++)
if(intervals[i].start<cur)
swap(intervals[i],intervals[++k]);
swap(intervals[start],intervals[k]);
quicksort(intervals,start,k-1);
quicksort(intervals,k+1,end);
}
class Solution {
public:
vector<Interval> merge(vector<Interval>& intervals) {
intn=intervals.size();
if(n<=1)
returnintervals;
quicksort(intervals,0,n-1);
vector<Interval> tmp;
tmp.push_back(intervals[0]);
Intervala,b;
for(inti=1;i<n;i++)
{
a=tmp.back();
tmp.pop_back();
b=intervals[i];
comp(a,b,tmp);
}
return tmp;
}
};