30. Insert Interval【LintCode by java】
Description
Given a non-overlapping interval list which is sorted by start point.
Insert a new interval into it, make sure the list is still in order and non-overlapping (merge intervals if necessary).
Example
Insert (2, 5) into [(1,2), (5,9)], we get [(1,9)].
Insert (3, 4) into [(1,2), (5,9)], we get [(1,2), (3,4), (5,9)].
题意:给定一个区间,将它插进一个有序的区间集合里,新的区间依然要保持有序性。这就需要考虑到区间的合并问题,我们可以定义一个新的集合,来存放最后的结果。定义一个temp游标,用一个循环从旧的集合中依次取出区间,与待插入区间进行比较。那么如何比较呢?假定新区间的end都小于temp的start,那说明新区间比temp要小,那么直接将新区间放进结果集合里就行了,剩下的依次插入。不然,则说明需要进行区间的合并,具体代码如下:
/**
* 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
//特殊情况的讨论
List<Interval>ans=new ArrayList<Interval>();
if(intervals.size()==0){
ans.add(newInterval);
return ans;
}
if(newInterval==null){
return intervals;
}
if(newInterval.start>intervals.get(intervals.size()-1).end){
intervals.add(newInterval);
return intervals;
} //一般情况的讨论
Interval last=null;
for(int i=0;i<intervals.size();i++){
//用不到newIneval
Interval temp=intervals.get(i);
if(newInterval.start>temp.end){
ans.add(temp);
continue;
}else{
//分两种情况
if(newInterval.end<temp.start){
ans.add(newInterval);
last=temp;
}else{
int start=newInterval.start<temp.start?newInterval.start:temp.start;
int end=newInterval.end<temp.end?temp.end:newInterval.end;
//合并
last=new Interval(start,end);
}
//对剩下的进行处理
for(int j=i+1;j<intervals.size();j++){
Interval t=intervals.get(j);
if(last.end<t.start){
//归并完成
ans.add(last);
last=t;
}else{
//继续归并
last.end=last.end>t.end?last.end:t.end;
}
}
ans.add(last);
break;
}
}
return ans;
}
}
30. Insert Interval【LintCode by java】的更多相关文章
- 156. Merge Intervals【LintCode by java】
Description Given a collection of intervals, merge all overlapping intervals. Example Given interval ...
- 212. Space Replacement【LintCode by java】
Description Write a method to replace all spaces in a string with %20. The string is given in a char ...
- 165. Merge Two Sorted Lists【LintCode by java】
Description Merge two sorted (ascending) linked lists and return it as a new sorted list. The new so ...
- 158. Valid Anagram【LintCode by java】
Description Write a method anagram(s,t) to decide if two strings are anagrams or not. Clarification ...
- 177. Convert Sorted Array to Binary Search Tree With Minimal Height【LintCode by java】
Description Given a sorted (increasing order) array, Convert it to create a binary tree with minimal ...
- 173. Insertion Sort List【LintCode by java】
Description Sort a linked list using insertion sort. Example Given 1->3->2->0->null, ret ...
- 172. Remove Element【LintCode by java】
Description Given an array and a value, remove all occurrences of that value in place and return the ...
- 155. Minimum Depth of Binary Tree【LintCode by java】
Description Given a binary tree, find its minimum depth. The minimum depth is the number of nodes al ...
- 211. String Permutation【LintCode by java】
Description Given two strings, write a method to decide if one is a permutation of the other. Exampl ...
随机推荐
- ZT 设计模式六大原则(1):单一职责原则
zt 设计模式六大原则(1):单一职责原则 分类: 设计模式 2012-02-21 09:52 25059人阅读 评论(65) 收藏 举报 设计模式stringclass编程 (THERE SHOUL ...
- 请问在JAVA编程中什么叫耦合?什么又叫解藕? 悬赏分:0 - 解决时间:2008-3-8 12:55
模块一的实现依赖于模块二,更改模块二后,模块一也得更改,那么二者就有耦合.修改程序,使得更改模块二后,模块一不受影响,那么就叫解藕 请问<java编程思想>中的“完全解藕”如何理解,和实现 ...
- idea 2018激活注册码
我使用的方法和pycharm激活类似,激活码不同而已pycharm激活步骤链接:可以新建标签打开https://www.cnblogs.com/-nbloser/p/8570648.html idea ...
- CCControlExtension/CCControl
#ifndef __CCCONTROL_H__ #define __CCCONTROL_H__ #include "CCInvocation.h" #include "C ...
- 【JavaScript】插件参数的写法
就是实现复制的一个过程 (function() { var Explode = function(container, params) { 'use strict'; var n = this; if ...
- indexzero/http-server-1-简介
ethereumjs-vm的例子有用到这个 看完ethereumjs-vm,再看他ethereumjs/browser-builds,然后最后看他http-server,然后就能了解ethereumj ...
- 想要使用 for循环,就要添加 索引器
- phantomJS浏览器
无界面浏览器 下载解压缩 http://phantomjs.org/download.html selenium调用 from selenium import webdriver import tim ...
- 【Git】将项目下的.git目录隐藏
将项目下的.git目录隐藏 在apache配置文件httpd.conf中添加配置: <Directory "${INSTALL_DIR}/www/mypro/.git"> ...
- 基于mysql的基准测试
常用的基准测试工具介绍: mysql基准测试工具: mysqlslap,mysql自带的工具,对于性能测试不建议使用 特点: 可以模拟服务器负载,并输出相关统计信息 可以指定也可以自动生成查询语句 常 ...