Merge Intervals

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

记返回数组为ret。

先对start排序。

然后对每两个interval(记为a,b),判断是否需要合并。

如果不需要合并(没有交集),则把a装入ret,将b继续往后。

如果需要合并(有交集),则把结果c继续往后。

这题本身是不难的,但是有两个细节:

1、compare函数中,如果是升序,必须是<而不是<=

解释:参考http://www.cplusplus.com/reference/list/list/sort/,比较必须产生strick weak ordering。

对于strick weak ordering 可以参考http://stackoverflow.com/questions/979759/operator-and-strict-weak-ordering/981299#981299

的详细说明。

总之,如果a,b不等,那么compare(a,b)和compare(b,a)其中之一为true,另一为false。

如果a,b相等,则都应该为false。

2、compare函数必须声明为静态成员函数或者全局函数,不能作为普通成员函数

解释:非静态成员函数是依赖于具体对象的,而std::sort这类函数是全局的,因此无法在sort中调用非静态成员函数。

可以把compare改成静态或者全局函数,使之不依赖于具体对象。

/**
* 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:
static bool compare(Interval v1, Interval v2)
{
if(v1.start < v2.start)
return true;
else if(v1.start > v2.start)
return false;
else
return v1.end < v2.end;
}
vector<Interval> merge(vector<Interval> &intervals) {
vector<Interval> ret;
if(intervals.empty())
return ret; sort(intervals.begin(), intervals.end(), compare);
ret.push_back(intervals[]);
for(int i = ; i < intervals.size(); i ++)
{//merge intervals to ret one-by-one //note that endv.start <= intv.start
if(intervals[i].end <= ret[ret.size()-].end)
//totally enclosed
;
//to here: intv.end > endv.end
else if(intervals[i].start <= ret[ret.size()-].end)
//merge
ret[ret.size()-].end = intervals[i].end;
//to here: intv.begin > endv.end
else
ret.push_back(intervals[i]);
}
return ret;
}
};

最新文章

  1. KVC &amp; KVO
  2. Android sqlite数据库自定义存放路径办法参考(未验证)
  3. Android Studio 获取 sha1-wangfeng520@
  4. C++ little errors , Big problem
  5. How to: Registry settings for generating Verbose log
  6. Linux之在CentOS上一次艰难的木马查杀过程
  7. ios 开发选取头像,图片库,相机,裁取图片
  8. 如何在 CentOS 7 上安装 Redis 服务器
  9. SQL数据库中把一个表中的数据复制到另一个表中
  10. MySQL存储过程事务处理
  11. java中的上传下载----ajaxFileUpload+struts2
  12. LeetCode 之 Triangle
  13. node压力测试
  14. Do you have an English name? 你有英文名吗?
  15. day02 while循环 运算符 格式化输出 编码
  16. JdbcUtil
  17. day32 process模块用法
  18. python scrapy爬虫数据库去重方法
  19. Python爬虫实战:2017中国最好大学排名
  20. MyEclipse10 添加反编译JadClipse插件

热门文章

  1. 设置IE浏览器指定的功能
  2. MyBatis+Spring SQL效率测试报告
  3. C/C++/Java 程序计时功能函数
  4. Linux系统教程 标准输入/输出和重定向
  5. zoj 2860 四边形优化dp
  6. 在C#中使用属性控制 XML 序列化来解析XML
  7. 关于html5获取用户地理位置
  8. ASP.NET WebServices 因 URL 意外地以“/HelloWorld”结束,请求格式无法识别。
  9. LINUX设备驱动程序笔记(五)中断处理
  10. Angular CLI的安装及使用