代码:
import java.util.*;
/*
* public class Interval {
* int start;
* int end;
* public Interval(int start, int end) {
* this.start = start;
* this.end = end;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param intervals Interval类ArrayList
* @param newInterval Interval类
* @return Interval类ArrayList
*/
public ArrayList<Interval> insert (ArrayList<Interval> intervals, Interval newInterval) {
if(intervals==null || newInterval==null) return intervals;
ArrayList<Interval> res=new ArrayList<Interval>();
int s=newInterval.start;
int e=newInterval.end;
int i=0;
//遍历原数组
for( i=0;i<intervals.size();i++){
Interval pass=intervals.get(i);
//没有交集分为两种情况:
if(pass.start>e){//当区间的开始边界大于插入区间的右边界
break;//跳出循环,将插入区间添加到结果集
}else if(pass.end<s){//当区间的右边界小于插入区间的左边界
res.add(pass);//说明没有交集,将区间添加到结果集里
}else{//两者有交集,更新插入集合的左右区间
s=Math.min(s,pass.start);
e=Math.max(e,pass.end);
}
}
res.add(new Interval(s,e));
while(i<intervals.size()){//说明跳出了循环,集合未遍历完
res.add(intervals.get(i));
i++;
}
return res;
}
}
需要注意的是:不重叠的区间的情况分为两种,左右边界分别讨论和处理。