您的位置:首页 > 其它

LeetCode OJ:Merge Intervals(合并区间)

2016-01-12 22:37 246 查看
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]
.

看起来感觉不像hard类型的题目,不过要注意的一点是这里给出的数据不一定会像上面这样按照顺序来进行排序,所以处理前首先要按照一定的规则处理一下,写一个functor来进行比较,用struct即可,排序后这个范围就很好确定了,代码如下所示:

class Solution {
public:
vector<Interval> merge(vector<Interval>& intervals) {
int p = 0, q = 1;
std::sort(intervals.begin(), intervals.end(), comp);
vector<Interval> ret;
while(q < intervals.size()){
if(intervals[p].end < intervals[q].start){ //这个范围需要记录下来
ret.push_back(intervals[p]);
p = q;
q++;
}else{
if(intervals[p].end < intervals[q].end) //根据条件才更新范围
intervals[p].end = intervals[q].end;
q++;
}
}
if(p < intervals.size())
ret.push_back(intervals[p]);
return ret;
}

struct myComparator{
bool operator()(const Interval & i, const Interval & j){
return i.start < j.start;
}
}comp;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: