博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode-56-合并区间
阅读量:6081 次
发布时间:2019-06-20

本文共 2082 字,大约阅读时间需要 6 分钟。

题目描述:

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

要完成的函数:

* Definition for an interval.

* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}

vector<Interval> merge(vector<Interval>& intervals) 

 

说明:

1、这道题给定一个vector,里面装着多个Interval,Interval是一个struct结构。

比如[[1,3],[2,6],[8,10],[15,18]],[1,3]这个就是一个Interval,有start和end。

现在要求合并区间,比如上面举的这个例子,可以合并成[[1,6],[8,10],[15,18]]。

最终也是包含Interval的vector这种形式。

 

2、这道题很明显,我们可以先按照Interval的start来升序排列,假设给定的vector是[[2,4],[1,3],[5,6],[5,8]],我们先排序成[[1,3],[2,4],[5,6],[5,8]]。

这样我们判断一下前一个[1,3]和后一个[2,4]可不可以合并,可以的话把合并的结果存在后一个里面,修改成[1,4]。

接着再判断后一个[1,4]和再后一个[5,6]可不可以合并,不可以的话就把后一个存储在要返回的vector中。

接着再比较再后一个[5,6]和再再后一个[5,8]可不可以合并,可以就把合并的结果存在后一个里面,修改成[5,8]。

最后我们再push_bck给定vector的最后一个Interval到要返回的vector中。

 

代码如下:

static bool cmp(Interval &a,Interval &b)//这里要加static    {        return a.start
merge(vector
& intervals) { if(intervals.size()==0)return intervals;//边界条件 vector
res;//要返回的vector sort(intervals.begin(),intervals.end(),cmp);//按照start升序排列 for(int i=1;i
intervals[i-1].end)//如果start大于前一位的end res.push_back(intervals[i-1]);//那么直接push_back前一位 else//如果要合并区间 { intervals[i].start=intervals[i-1].start;//修改当前interval的start intervals[i].end=max(intervals[i-1].end,intervals[i].end);//修改当前interval的end } } res.push_back(intervals.back());//最后记得要push_back最后一个 return res; }

上述代码中,cmp函数前面要加static,定义为静态函数,不然会报错:invalid use of non-static member function 'bool Solution::cmp(Interval&, Interval&)'。

我也不懂为什么要加static的定义,对于这一块不是很熟悉……

另外,在cmp函数中,如果return a.start<=b.start,也就是把小于号换成小于等于号,同样报错,有一个测试样例跑不过,我也不知道为什么会跑不过。

照理来说都是一样的……如果有同学知道,烦请不吝赐教。

 

上述代码实测12ms,beats 96.53% of cpp submissions。

转载于:https://www.cnblogs.com/chenjx85/p/9554300.html

你可能感兴趣的文章
网站优化的14条准则
查看>>
IOSTips:UIButton 设置图片文字垂直排列
查看>>
python 学习笔记 1 for循环中常用的函数
查看>>
7-Java面向对象-多态
查看>>
Zookeeper可以干什么?
查看>>
短视频APP平台怎么开发?不得不了解的短视频源码功能机制后篇
查看>>
常用RGB色值表
查看>>
Google Play 发现恶意应用,窃取用户数字货币
查看>>
极简风Js时钟
查看>>
用js来实现那些数据结构14(树02-AVL树)
查看>>
C# 复制一个Word文档的部分或全部内容到另一个Word文档
查看>>
7-Zip 19.00 正式版发布,修正 Win10 1809(17763) 可能无法正常使用大内存页
查看>>
Gartner:中国企业追求AI实战性 云厂商正引领这一方向
查看>>
Web前端单元测试到底要怎么写?看这一篇就够了
查看>>
基于PostGIS的高级应用(2)--线数据的汇总分析
查看>>
跟着小程一起聊聊GIT那点事
查看>>
使用scikit-learn解决文本多分类问题(附python演练)
查看>>
好看的皮囊 · 也是大自然的杰作 · 全球高质量 · 美图 · 集中营 · 美女 · 2017-08-22期...
查看>>
【Java疑难杂症】有return的情况下try catch finally的执行顺序
查看>>
求算符文法的FIRSTVT集的算法
查看>>