Merge Intervals 这个应该叫合并间隙?
2015-03-23 17:20
141 查看
leetcode上的原题:
Given a collection of intervals, merge all overlapping intervals.
For example,
Given
return
题意应该好理解,比如 1,3 与2,6都是被标记的范围,要求改为用1,6来表示。
这个是用来表示间隙的结构体。
解决思路:
首先排序,把Interval们按start的升序排列,这样可以合并的Interval肯定就挨在一起了,然后找出相邻可以合并的Interval的最大end,就能合并了。
感觉没什么好说的,上代码吧。
这里为了用库的快排,重载了一个<,也可以 写一个比较函数cmp,原理一样的,比较start就行。
判断是否可以合并是用后一个interval的start与当前interval的end比较,可以看出两个interval是否交叉。
注意:第一个循环不能把i++,因为i已经在子循环中达到了一个用于合并的interval的头部。
ac过后发现用了24ms,本来自我感觉还行的,结果看到竟然没有达到平均水平,于是干脆把i变成数组下标。快了一点,21ms完成。达到了平均水准,但是好多大神好像在个位数ms就搞定了,估计还有什么可以优化的地方……
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].
题意应该好理解,比如 1,3 与2,6都是被标记的范围,要求改为用1,6来表示。
这个是用来表示间隙的结构体。
/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {} * }; */
解决思路:
首先排序,把Interval们按start的升序排列,这样可以合并的Interval肯定就挨在一起了,然后找出相邻可以合并的Interval的最大end,就能合并了。
感觉没什么好说的,上代码吧。
bool operator < (Interval a, Interval b) { return a.start < b.start; } class Solution { public: vector<Interval> merge(vector<Interval> &intervals) { if (intervals.size() < 2) return intervals; sort(intervals.begin(), intervals.end()); vector<Interval>res; for (auto i = intervals.begin(); i != intervals.end() ;) { res.push_back(*i); for (i++; i != intervals.end() && res.back().end >= i->start; i++) res.back().end = max(i->end, res.back().end); } return res; } };
这里为了用库的快排,重载了一个<,也可以 写一个比较函数cmp,原理一样的,比较start就行。
判断是否可以合并是用后一个interval的start与当前interval的end比较,可以看出两个interval是否交叉。
注意:第一个循环不能把i++,因为i已经在子循环中达到了一个用于合并的interval的头部。
ac过后发现用了24ms,本来自我感觉还行的,结果看到竟然没有达到平均水平,于是干脆把i变成数组下标。快了一点,21ms完成。达到了平均水准,但是好多大神好像在个位数ms就搞定了,估计还有什么可以优化的地方……
相关文章推荐
- 这个看到 一个网友的 blog 上看到的 ,,,我想他们头 真应该去学习学习啦!
- 这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的Spring.Net了吧
- 不要使用连接来合并多个字符串,应该使用StringBuilder来提高性能
- 以前从没搞过安卓,想问下里面这个效果应该怎么实现
- 7.10现在这个点买凡客的衣服应该是最便宜的
- 中文域名,这个真应该有!
- HDU--杭电--1978--How many ways--记忆化搜索--这个鸟东西应该能算半个DP吧
- git 下如何把另外一个分支的某个文件改动merge 合并到这个分支,而不是把整个分支merge过来
- 这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的简单工厂了吧
- 在一个普通的一天,抱着一个普通的心态,开通了这个普通的博客,所以应该普通的写点什么
- 本来他以为这个想法会让杨光很吃惊,而且应该会很难办
- [这个兄弟应该顶]留美博士后仿制昂贵进口抗癌药受审 律师辩称是救人
- 创建从Java EE到.NET的事务桥梁(java和.net应该合并出一个新的产物)
- 这个应该比较有前途。
- 转载 : HEX文件格式,ihex,hex解析(这个应该是准确的描述)
- 求助 3ds max模型导入vrp的问题 求大神指教 等 这个问题大家有遇到过吗 应该怎么解决啊
- 这个应该是目前最全的Tracking相关的文章了
- 快速找出N以内的所有素数解法,python版本。这个应该是最快的了
- 我想大部分的WPF和SL开发者都应该对INotifyPropertyChanged这个接口再熟悉不过了。