您的位置:首页 > 其它

57. Insert Interval

2016-06-04 20:25 218 查看
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: