这个题以前做过类似的,是问给定一些区间,最多能选出多少互不相交的区间。思路是先对区间依照起始点或结束点进行排序,然后依次选取即可(与前一个选取的区间有overlap则不选取)。这题思路也是一样,先对区间依照起始点进行排序,然后依次合并就行了。
/**
* 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:
#对区间按起始点进行排序
static bool cmp(Interval a,Interval b)
{
return a.start<b.start;
}
vector<Interval> merge(vector<Interval>& intervals)
{
vector<Interval> ans;
if(intervals.empty()) return ans;
sort(intervals.begin(),intervals.end(),cmp);
ans.push_back(intervals[0]);
for(int i=1;i<intervals.size();i++)
{
#若下一个区间与上一个区间有overlap,则更新上一区间的结束点
if(intervals[i].start<=ans.back().end)
ans.back().end=max(ans.back().end,intervals[i].end);
#否则直接讲区间加入ans中
else
ans.push_back(intervals[i]);
}
return ans;
}
};