题意为给定一系列间隔集合,将重叠部分合并
首先判断传入的vector是否为空,若为空则返回它本身
然后根据题目给出的struct定义,可以先将这些间隔根据start的大小进行排序,这一步的实验需要用到stl中的sort函数,并且写出compare函数:
static bool compare(Interval a, Interval b){
if(a.start == b.start) return a.end < b.end;
else return a.start < b.start;
}
创建新的vector,ret作为待返回的结果,先将intervals[0]插入ret中
然后从intervals的第二项开始比较:
(1)若该项的start值大于ret中最后一项的end值,可以直接将该项插入ret中
(2)若(1)不成立且该项的end值大于ret中最后一项的end值,则用该项的end值更新ret最后一项的end值
(3)若(1)(2)均不成立,则继续比较intervals中的下一项
下面给出代码:
vector<Interval> merge(vector<Interval>& intervals) {
if(intervals.empty())
return intervals;
sort(intervals.begin(), intervals.end(), compare);
int length = intervals.size();
vector<Interval> ret;
ret.push_back(intervals[0]);
int index = 0;
for(int i = 1; i<length; i++){
if(intervals[i].start > ret[index].end){
ret.push_back(intervals[i]);
index++;
continue;
}
else if(intervals[i].end > ret[index].end){
ret[index].end = intervals[i].end;
continue;
}
else{
continue;
}
}
return ret;
}