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]
.
这道题的思路其实也很直接,就是先将intervals按start值进行排序,然后从头开始进行判断,如果前一个interval的end值小于后一个interval的start值,则无需处理,反之,则设置前一个interval的end值取该值与后一个interval的end值中的更大值
/**
* 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;
sort(intervals.begin(),intervals.end(),[](Interval a,Interval b){return a.start<b.start;});
result.push_back(intervals[0]);
for(int i=1;i<intervals.size();i++)
{
if(result.back().end < intervals[i].start)
result.push_back(intervals[i]);
else
result.back().end = max(intervals[i].end,result.back().end);
}
return result;
}
};