原题:
解决方法:
代码:
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]
.
解决方法:
毫无疑问,首先需要对数组进行排序。
然后从后往前,依次合并重叠的区间。
合并时取起点中的较小值、终点中的较大值,合并完成后应该删除被合并的区间。
代码:
vector<Interval> merge(vector<Interval>& intervals) {
int n = intervals.size();
auto comp = [](const Interval& a, const Interval& b){
return a.start < b.start;
};
sort(intervals.begin(), intervals.end(),comp);
for(int i = n - 2; i >= 0; i--){
while( ((i+1) < intervals.size()) && intervals[i+1].start <= intervals[i].end ){
intervals[i].start = min(intervals[i].start, intervals[i+1].start);
intervals[i].end = max(intervals[i].end, intervals[i+1].end);
intervals.erase(intervals.begin() + i + 1);
}
}
return intervals;
}