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]
.
题目没有说所有间隔的start是依次增加的。所以,为了方便讨论,我们要将所有间隔按照start升序排列。因为间隔增加,就只需讨论end和下一个间隔。
结果集中是没有交叉出现的,排序后,遍历下一个时,只会跟结果集最后一个产生交叉,而不会跟在前的结果产生交叉(因为结果集中,最后一个间隔的start>前一个的end)
排列结束后,我们只需要讨论后一个跟前一个结果,如果后一个间隔的start大于前一个结果集中的间隔的end,那么没有交叉,直接添加 结果集。
否则该间隔就和结果集中最后一个间隔有交叉,这时要讨论该间隔的end和结果集中最后一个间隔的end大小,前者大,就要删除结果集最后一个,然后将前者加入结果集;如果后者大,说明只是end和start交叉了,这样删除结果集最后一个,添加新的间隔。见代码。
/**
* Definition for an interval.
* public class Interval {
* int start;
* int end;
* Interval() { start = 0; end = 0; }
* Interval(int s, int e) { start = s; end = e; }
* }
*/
class Solution {
public List<Interval> merge(List<Interval> intervals) {
List<Interval> res=new ArrayList<Interval>();
if(intervals==null||intervals.size()<=1) return intervals; Collections.sort(intervals,new Comparator<Interval>(){
public int compare(Interval o1,Interval o2){
return o1.start-o2.start;
}
});
res.add(intervals.get(0));
for(int i=1;i<intervals.size();i++){
Interval in1=res.get(res.size()-1); //结果集中最后一个间隔,用于比较
Interval in2=intervals.get(i); //当前间隔,只会与结果集中最后一个间隔产生交集。
if(in1.end<in2.start) res.add(in2); //没有交叉。直接加入
else { //有交叉
if(in1.end>=in2.end) continue;//前一个包含后一个,跳过
else{ //只是start和end交叉
res.remove(res.size()-1);
res.add(new Interval(in1.start,in2.end));
}
}
}
return res;
}
}
merge intervals(合并间隔)的更多相关文章
- [LeetCode] Merge Intervals 合并区间
Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8, ...
- [LeetCode] 56 - Merge Intervals 合并区间
Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...
- 056 Merge Intervals 合并区间
给出一个区间的集合, 请合并所有重叠的区间.示例:给出 [1,3],[2,6],[8,10],[15,18],返回 [1,6],[8,10],[15,18].详见:https://leetcode.c ...
- Leetcode56. Merge Intervals合并区间
给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] ...
- LeetCode 56. Merge Intervals 合并区间 (C++/Java)
题目: Given a collection of intervals, merge all overlapping intervals. Example 1: Input: [[1,3],[2,6] ...
- 【LeetCode每天一题】Merge Intervals(合并区间)
Given a collection of intervals, merge all overlapping intervals. Example 1: Input: [[1,3],[2,6],[8, ...
- [array] leetcode-56. Merge Intervals - Medium
leetcode-56. Merge Intervals - Medium descrition Given a collection of intervals, merge all overlapp ...
- 【leetcode】Merge Intervals
Merge Intervals Given a collection of intervals, merge all overlapping intervals. For example,Given ...
- 【leetcode】 Merge Intervals
Merge Intervals Given a collection of intervals, merge all overlapping intervals. For example,Given ...
随机推荐
- Java基础---Java---IO流-----BufferedReader、BufferedWriter、缓冲区、装饰设计模式及和继承的区别
IO流 IO流用来处理设备之间的数据传输 java对数据的操作是过流的方式 流按操作数据分为两种:字节流与字符流 流按流向分为:输入流,输出流. IO流常用基类 字节流的抽象基类:InputStrea ...
- React Native自动化测试
大凡做软件开发,肯定会涉及到很多的测试,本地测试,Junit测试,用例测试等,今天就来说说RN的测试. React Native的官方代码仓库里有一些测试代码,你可以在贡献代码之后回归测试一下,以检测 ...
- dbms_lob使用之-基础
在Oracle中,存储在LOB中数据称为LOB的值,如使用Select 对某一LOB字段进行选择,则返回的不是LOB的值,而是该LOB字段的定位器(可以理解为指向LOB值的指针).如执行如下 ...
- Linux内核基础
Linux系统运行的应用程序通过系统调用来与内核通信.应用程序通常调用库函数(比如C库函数)再有库函数通过系统调用界面,让内核带其完成各种不同的任务. 下面这张图显示的就是应用程序,内 ...
- Mybatis源码之(TypeAliasRegistry)TypeAlias别名实现机制
在Mybatis编程中我们经常会用到将某个bean作为参数类型parameterType或者结果返回值类型ResultType,所以很多时候我们需要把完成的Bean的包名在mapper文件中写上,如下 ...
- STL:list用法详解
list容器介绍 相对于vector容器的连续线性空间,list是一个双向链表,它有一个重要性质:插入操作和删除操作都不会造成原有的list迭代器失效,每次插入或删除一个元素就配置或释放一个元素空间. ...
- 开放源码的安卓天气应用-android学习之旅(73)
我在github上面发布了简易的天气应用,能够简单显示全国各个省市县市的天气 效果图片如下 源代码我放在github上了.我希望大家可以去下载,修改以后在上传维护,我的代码很简单.算是抛砖引玉,希望大 ...
- Python代码运行助手
将下述demo文件保存下来,比如存为learning.py 然后运行,如果出现: Ready for Python code on port 39093... 则说明成功了. demo #!/usr/ ...
- 监控系统的多协议直播(RTSP RTMP HTTP Live Streaming)
监控系统的多协议直播(RTSP RTMP HTTP Live Streaming)
- 跨平台移动APP开发进阶(一)mui开发注意事项
mui开发注意事项 Mui HTML5开发框架 mui是一个高性能的HTML5开发框架,从UI到效率,都在极力追求原生体验:这个框架自身有一些规则,刚接触的同学不很熟悉,特总结本文:想了解mui更详细 ...