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,2],[3,5],[6,7],[8,10],[12,16]
, 现在插入一个[4,9]
进行合并,问合并之后是什么样子,这个例子合并之后应该是 [1,2],[3,10],[12,16]
.这个样子。
思路和题56差不多,要多处理一下这个新插入的区间。
给定的区间集合是有序的,把【新区间】,插入到原来区间集合里的【合适位置】,所谓合适位置就是原来集合是按区间左端点升序排列的,插入以后还要满足新集合按照左端点升序排列,再套用题Merge Intervals的处理办法进行合并。
public List<Interval> insert(List<Interval> intervals, Interval newInterval)
{
List<Interval> retlist=new ArrayList<>();
int len=intervals.size();
if(len<1)
{
retlist.add(newInterval);
return retlist;
}
int index=0;
while(index<len&&newInterval.start>=intervals.get(index).start)
index++;
if(newInterval.start<intervals.get(0).start)
intervals.add(0, newInterval);
else {
intervals.add(index, newInterval);
}
len++;
boolean[] used=new boolean[len];
for(int i=0;i<len;i++)
if(!used[i])
{
used[i]=true;
Interval in1=intervals.get(i);
int newstart=in1.start;
int newend=in1.end;
for(int j=i+1;j<len;j++)
if(!used[j])
{
Interval in2=intervals.get(j);
if(in2.start<=newend)
{
newend=Math.max(newend, in2.end);
used[j]=true;
}
else {
break;
}
}
retlist.add(new Interval(newstart, newend));
}
return retlist;
}