LintCode 插入区间
来源:互联网 发布:个人时间规划软件 编辑:程序博客网 时间:2024/06/08 14:09
给出一个无重叠的按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
样例
插入区间[2, 5] 到 [[1,2], [5,9]],我们得到 [[1,9]]。
插入区间[3, 4] 到 [[1,2], [5,9]],我们得到 [[1,2], [3,4], [5,9]]。
对于原区间列表中的任意一个,有以下三种情况:
1.新区间完全在原来某区间的左侧,那么就找到插入位置了,执行插入。
2.新区间完全在原来某区间的右侧,继续判断下一个原区间。
3.新区间与原来某区间有重叠,把新区间的start和end更新,记录下重叠区间,继续判断下一个原区间。
在最后执行插入的时候,把原来的重复区间都删掉,然后插入新区间。
代码如下:
/** * Definition of Interval: * public classs Interval { * int start, end; * Interval(int start, int end) { * this.start = start; * this.end = end; * } */public class Solution { /* * @param intervals: Sorted interval list. * @param newInterval: new interval. * @return: A new interval list. */ public List<Interval> insert(List<Interval> intervals, Interval newInterval) { // write your code here int l=0,r=0;//l用来记录第一个重复区间的位置。 if(intervals.size()==0){//原区间列表是空,直接插入。 intervals.add(newInterval); return intervals; } for(int i=0;i<intervals.size();i++){ if(intervals.get(i).end<newInterval.start){l++;}//新区间在这个原区间右侧,l++,未重叠,所以l后移一位 else if(intervals.get(i).start>newInterval.end){//新区间在这个原区间左侧,可以执行插入了 break; } else{ newInterval.start=Math.min(newInterval.start,intervals.get(i).start); newInterval.end=Math.max(newInterval.end,intervals.get(i).end); r++;//记录重叠区间的个数 } } for(int j=l+r-1;j>=l;j--){//删除重叠区间,注意从后向前删除,否则列表的长度在删除时减小,而下标在增大,会越界 intervals.remove(j); } intervals.add(l,newInterval); return intervals; }}
阅读全文
0 0
- lintcode-插入区间
- 插入区间 lintcode
- LintCode 插入区间
- LintCode【插入区间】
- lintcode(30)插入区间
- LintCode 30 插入区间
- Lintcode 插入区间
- LintCode--插入区间
- LintCode 插入区间
- Lintcode:插入区间
- 【LintCode】Insert Intervals 插入区间
- (lintcode)第30题 插入区间
- LintCode-搜索区间
- lintcode-156-合并区间
- lintcode-搜索区间-61
- Lintcode搜索区间
- LintCode : 搜索区间
- LintCode:搜索区间
- Struts2 访问request session application对象 。
- crontab脚本执行失败原因
- 微信测试号开发之三 接收处理消息并响应
- AJAX无法获取值的问题
- 如何去掉myeclipse的js代码提示的错误
- LintCode 插入区间
- C++中类与对象的讲解(通俗易懂)
- 计算机网络实验二 CDMA 编码 [17/10/25]
- struts2工作流程
- 大话设计模式----依赖倒置原则
- 14期 11月博客自荐
- 欧拉函数模板
- Struts2的执行流程
- okhttp