Merge Intervals
2015-10-17 14:05
232 查看
题目: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].
思路:
先是进行排序,从前往后按照第一个数字进行排序。这个时候一个小技巧就是把第一个区间保存,i从1开始,这是小技巧。这个时候循环里面判断一下,如果i的start大于刚刚back的end,那么就直接存入result,如果不是,更新一下end。因为有可能会更新区间,end值大于下一个区间的start值。
代码:
/*** Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
class Compare {
public:
bool operator() (const Interval &i1, const Interval i2) {
return i1.start < i2.start;
}
};
vector<Interval> merge(vector<Interval>& intervals) {
vector<Interval> result;
if(intervals.empty()){
return result;
}
Compare cmp;
sort(intervals.begin(),intervals.end(),cmp);//按照开头数字升序排列
//注意考虑两个区间合并后,他的end比下一个的start还要大
int i=0;
int k=0;
result.push_back(intervals[0]);//记住加入第一个数据。
for(int i=1;i<intervals.size();i++){
if(intervals[i].start>result.back().end){
result.push_back(intervals[i]);
}else{
//此时注意两种情况,但是总之是有交集的
result.back().end=max( result.back().end,intervals[i].end );
}
}
return result;
}
};
相关文章推荐
- 【图像处理】数字图像处理软件-特效--光晕特效(五)
- 黑马程序员--指向指针的指针 写的非常好 适合0基础菜鸟
- printf PRIu64
- 微信jsSDK开发
- 过渡性html
- Lucene之——输出分词结果的核心代码
- 初识java——Java程序的历史、开发和运行
- 微信红包引流量攻略
- java多线程学习笔记(七) ——消费者与生产者(LOCK、Condition接口)
- Python 内建函数--map()
- Ubuntu 安装配置Zookeeper
- C语言初学记录
- 自动定量发表删除空间说说脚本代码
- 【剑指offer】面试题35:第一个数字只出现一次
- Code Forces 586 B. Laurenty and Shop(水~)
- vim note(4)
- myeclipse解决Fail to create the java Virtual Machine
- OGNL的应用
- 【Ogre引擎架构】 第八讲 像素卷积的艺术-GaussianBlur高斯模糊(一)
- java中Set集合