一、原题
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]
.
二、中文
给定一系列非覆盖的区间,插入一个新的区间,有必要的时候进行区间合并,区间开始是以起始时间进行合并的
三、举例
原来的区间是[2,5] 第二个区间是[6,9] 当我们插入一个区间[4,7]后,最后得到的区间是[2,9]
四、思路
1、如果插入的区间比集合的end小,就直接插入
2、如果插入的区间的end比带插入区间的start小,就插入到里边
3、插入区间有重叠,更新就更新插入区间,start选小的,end选大的
五、程序
package code;
import java.util.*;
class Interval2 {
int start;
int end;
Interval2(){
start = 0;
end = 0;
}
Interval2(int s, int e){
start = s;
end = e;
}
}
public class LeetCode35{
public static void main(String args[]){
LinkedList<Interval2> num = new LinkedList<Interval2>();
Interval2 in1 = new Interval2(1, 3);
Interval2 in2 = new Interval2(4, 6);
Interval2 in3 = new Interval2(8, 10);
Interval2 in4 = new Interval2(13, 20);
num.add(in1);
num.add(in2);
num.add(in3);
num.add(in4);
Interval2 add = new Interval2(5, 9);
LinkedList<Interval2> list = insertRegion(num, add);
Iterator<Interval2> it = list.iterator();
while(it.hasNext()){
Interval2 iter = it.next();
System.out.print(iter.start+" ");
System.out.print(iter.end+" ");
}
}
public static LinkedList<Interval2> insertRegion(LinkedList<Interval2> intervals,
Interval2 newInterval) {
//保存结果集
LinkedList<Interval2> res = new LinkedList<Interval2>();
//输入集如果是非空的
if(intervals != null){
for(Interval2 item : intervals){
if(newInterval == null || item.end < newInterval.start){
res.add(item);
}
//将比插入区间大的区间插入到结果集中
else if(item.start > newInterval.end){
res.add(newInterval);
res.add(item);
newInterval = null;
}
//插入区间有重叠,更新插入区间
else{
newInterval.start = Math.min(newInterval.start, item.start);
newInterval.end = Math.max(newInterval.end, item.end);
}
}
}
return res;
}
}
------------------------output----------------------------
1 3 4 10 13 20