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].

Show Tags

Array Sort

 

  这题其实想好思路很好解决,对于框,如果下个框开始在 其中间,则连在一起,否则单独为一个,这需要按start 排序便可以了,因为类中写自定义比较函数比较麻烦,所以一次写了好几个。
  1. 按start 排序
  2. 初始化变量curstart,curend,记录当前窗的位置。
  3. 与下个窗比较,如果其start < curend,更新 curend。
  4. 否则加入ret,并跟新curstart,curend
  5. 遍历结束,加入最后的窗。
 #include <iostream>
#include <vector>
#include <algorithm>
using namespace std; /**
* Definition for an interval.
*/
struct Interval {
int start;
int end;
Interval() : start(), end() {}
Interval(int s, int e) : start(s), end(e) {}
}; class Solution {
public:
vector<Interval> merge(vector<Interval> &intervals) {
sort(intervals.begin(),intervals.end(),\
[] (Interval i1,Interval i2)\
{return i1.start<i2.start; }); /// sort(intervals.begin(),intervals.end(),help_fun); /** struct my_cmp{
bool operator ()(Interval i1,Interval i2){
return i1.start<i2.start;
}
}my_cmp1;
sort(intervals.begin(),intervals.end(),my_cmp());
sort(intervals.begin(),intervals.end(),my_cmp1);
*/ // for(int i=0;i<intervals.size();i++){
// cout<<intervals[i].start<<" "<<intervals[i].end<<endl;
// }
vector<Interval> ret;
if(intervals.size()<) return ret;
int curStart=intervals[].start,curEnd=intervals[].end;
for(int i=;i<intervals.size();i++){
if(curEnd>=intervals[i].start){
if(intervals[i].end>curEnd) curEnd=intervals[i].end;
continue;
}
ret.push_back(Interval(curStart,curEnd));
curStart = intervals[i].start;
curEnd = intervals[i].end;
}
ret.push_back(Interval(curStart,curEnd));
return ret;
} static bool help_fun(Interval i1,Interval i2)
{
return i1.start<i2.start;
}
}; int main()
{
vector<Interval> intervals={Interval(,),\
Interval(,),\
Interval(,),\
Interval(,)};
Solution sol;
vector<Interval> ret = sol.merge(intervals); for(int i=;i<ret.size();i++){
cout<<ret[i].start<<" "<<ret[i].end<<endl;
}
return ;
}

最新文章

  1. the pipeline of call SNP
  2. Mysql Communication link failure :1153 Got a packet bigger than &#39;max_allowed_packet&#39; bytes
  3. C#string类;math类;datetime类
  4. SQL SERVER获取数据库中所有表名 XTYPE类型
  5. 在sqlserver存储过程中给in参数传带逗号值的办法,如传&#39;1&#39;,&#39;2&#39;,&#39;3&#39;这样的
  6. 让mingw gdb支持STL,并自动load .gdbinit
  7. 批量Load/Store指令的寻址方式
  8. AE实现点击一个要素,并显示其属性
  9. httphandler与httpmodule区别
  10. 【有源汇上下界最大流】ZOJ 3229 Shoot the Bullet
  11. ZOJ 2675 Little Mammoth(计算几何)
  12. 记一次坑die(误)的题目--HDU2553--(DFS)
  13. nested query for &quot;pat2&quot; table
  14. .net core中使用GB2312编码的问题
  15. 【ASP.NET】website转webapplication
  16. 68.jq---tab选项实现网页定点切换
  17. YOLO V2 代码分析
  18. Python requests代理
  19. Unity AssetBundle打包资源工具
  20. 我的border能自定义四角之border-radius : 左上角,右上角,左下角,右下角。

热门文章

  1. ES6 的解构赋值前每次都创建一个对象吗?会加重 GC 的负担吗?
  2. JZOJ 3383. 【NOIP2013模拟】太鼓达人
  3. 20190103(GIL,池,阻塞,同步异步)
  4. 适合学习的QT开源项目-SerialTool
  5. POJ 3370 Halloween treats(抽屉原理)
  6. 51NOD 1292 1277(KMP算法,字符串中的有限状态自动机)
  7. Java EnumSet工作原理初窥
  8. RSA进阶之低加密指数攻击
  9. Ecplise实战常用操作快捷键(更新至2018年10月8日 13:46:40)
  10. Python学习-day16-DOM