首页 > 学院 > 开发设计 > 正文

【LeetCode题解】56. Merge Intervals

2019-11-06 06:30:33
字体:
来源:转载
供稿:网友

题意为给定一系列间隔集合,将重叠部分合并

首先判断传入的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;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表