[leetcode-57]Insert Interval(java)
2015-08-03 11:27
453 查看
问题描述:
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
You may assume that the intervals were initially sorted according to their start times.
Example 1:
Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].
Example 2:
Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].
This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].
分析:该题与l-56很类似,首先,明确这样几点:
在插入newInterval之前,intervals是有序的,且没有overlapping,所以可以直接添加。
当检查到可以添加newInterval时,需要与顶部元素进行比较。因此,不妨统一赋值给current,减少代码量。
当插入到newInterval后,后面插入的每个元素都要检查与顶部元素的比较。
代码如下:392ms
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
You may assume that the intervals were initially sorted according to their start times.
Example 1:
Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].
Example 2:
Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].
This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].
分析:该题与l-56很类似,首先,明确这样几点:
在插入newInterval之前,intervals是有序的,且没有overlapping,所以可以直接添加。
当检查到可以添加newInterval时,需要与顶部元素进行比较。因此,不妨统一赋值给current,减少代码量。
当插入到newInterval后,后面插入的每个元素都要检查与顶部元素的比较。
代码如下:392ms
[code]/** * 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; } * } */ public class Solution { public List<Interval> insert(List<Interval> intervals, Interval newInterval) { List<Interval> res = new LinkedList<Interval>(); int length = intervals.size(); if(length<=0){ res.add(newInterval); return res; } boolean filled = false; for(int i = 0;i<length;i++){ Interval current = intervals.get(i); if(!filled && current.start>=newInterval.start){ current = newInterval; filled = true; i--; }else if(!filled) res.add(current); if(filled){ if(res.isEmpty()){ res.add(current); continue; } Interval top = res.get(res.size()-1); if(top.end>=current.start) top.end = Math.max(top.end,current.end); else res.add(current); } } if(!filled){ Interval top = res.get(res.size()-1); if(top.end>=newInterval.start) top.end = Math.max(top.end,newInterval.end); else res.add(newInterval); } return res; } }
相关文章推荐
- 使用maven打包,报出java.lang.OutOfMemoryError: Java heap space
- Spring+Hibernate4配置使用cache的问题
- 利用Myeclipse为现有项目添加maven支持,傻瓜式操作即可轻松解决jar包依赖问题
- java中repaint()定时刷面板问题及演示代码(附滚动条实现)
- Java中Map的问题
- 全局结果的视图配置
- Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)
- Eclipse注解模板设置详解
- 8.3java学习笔记
- BinaryHeap Java实现
- JAVA使用JDBC连接MySQL数据库
- RxJava入门
- Eclipse在点击运行后不能自动保存的解决
- java操作excel2010时无法找到WorkbookFactory类
- java 开发,jsp 页面那个checkbox 框记住密码是怎么实现的?
- NetBeans字体设置
- java 线程 Thread 使用介绍,包含wait(),notifyAll() 等函数使用介绍
- HBase - Java 客户端 | 那伊抹微笑
- Java并发编程总结
- Spring MVC之@RequestBody, @ResponseBody 详解(转)