题目原型:
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]
.
基本思路:
插入的时候分三种情况:
1、当待插入区间的high值小于插入区间时,直接插入:如,[3,4](插入区间);[1,2](待插入区间);
2、当待插入区间的low值大于插入区间的high值时,继续扫描;
3、其余情况,分别比较;令low=minvalue,high=maxvalue。
public ArrayList<Interval> insert(ArrayList<Interval> intervals,
Interval newInterval)
{
int low = newInterval.start;
int high = newInterval.end;
for(ListIterator<Interval> iter = intervals.listIterator();iter.hasNext();)
{
Interval in = iter.next();
//直接插入
if(high<in.start)
{
iter.previous();
iter.add(new Interval(low,high));
return intervals;
}
if(low>in.end)
continue;
else
{
low = low<in.start?low:in.start;
high = high>in.end?high:in.end;
iter.remove();
}
}
intervals.add(new Interval(low,high));
return intervals;
}