Given a collection of intervals, merge all overlapping intervals.
For example,
Given[1,3],[2,6],[8,10],[15,18]
,
return [1,6],[8,10],[15,18]
.
解:按照Interval的start为关键字,递减的排序。
vector<Interval> merge(vector<Interval>& intervals) {
int n=intervals.size();
vector<Interval> ans;
if(n==0) return ans;
sort(intervals.begin(),intervals.end(),[](Interval p1,Interval p2){
return p1.start<p2.start ||(p1.start==p2.start&&p1.end>p2.end);
});
ans.push_back(intervals[0]);
for(int i=1;i<n;i++)
{
Interval t=ans[ans.size()-1];
if(intervals[i].end<=t.end) continue; //在已有的Interval之内
if(intervals[i].start>t.end)//和现有的完全没重合
ans.push_back(intervals[i]);
else ans[ans.size()-1].end=intervals[i].end;//有重合,更新end
}
return ans;
}