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]
.
题目解析:
由于输入的数据不一定有序,就要先对原始数据按照起始范围排序。那么如何排序呢?sort()有一个三个参数的函数,第三个参数是一个函数指针,指向的函数定义了排序时应该按照的关键字,以及排序的方式(递增还是递减)
static bool compareInterval(const Interval& a, const Interval& b)
{
return a.start < b.start;
}
这样定义,就是按照第一个元素排序,并且按照递增的顺序排。
排好序后,就容易是数组合并了,当a[i].start > tmp.end的时候,就将tmp放入输出容器中,并以a[i]为新的tmp与后面的进行合并。
class Solution {
public:
static bool compareInterval(const Interval& a, const Interval& b){
return a.start < b.start;
}
vector<Interval> merge(vector<Interval> &intervals) {
vector<Interval> ret;
if(intervals.size() > 0){
sort(intervals.begin(), intervals.end(), compareInterval);
Interval temp = intervals.at(0);
for(int i = 1; i < intervals.size(); ++i){
if(intervals.at(i).start > temp.end){
ret.push_back(temp);
temp = intervals.at(i);
}else
temp.end = max(temp.end, intervals.at(i).end);
}
ret.push_back(temp);
}
return ret;
}
};