题意为给定一系列间隔集合,将重叠部分合并
首先判断传入的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;}
新闻热点
疑难解答