向一组有序的区间中插入一个区间,并合并。。。。试想:区间之间有三种情况:
1. A.end<B.start
2.A.start>B.end
3其他
由于区间集合有序,1,2两种情况区间和插入区间毫无交集,但是在2情况时要将当前待插入区间插入》。。情况三即和待插入区间有重叠...此时我们取两端极值更新待插入区间即可完成区间的合并.....最后需要判断是否出现了情况2,即更新后的待插入区间是否插入....这样遍历一遍区间集合即可完成....
/**
* Definition for an interval.
* public class Interval {
* int start;
* int end;
* Interval() { start = 0; end = 0; }
* Interval(int s, int e) { start = s; end = e; }
* }
*/
public class Solution {
public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
List<Interval> res = new ArrayList<Interval>();
int l = newInterval.start;
int r = newInterval.end;
int flag=0;
for(Interval i : intervals)
{
if(flag==1)
{
res.add(i);
continue;
}
if(l > i.end)
{
res.add(i);
continue;
}
if(r < i.start)
{
Interval tmp = new Interval(l,r);
res.add(tmp);
res.add(i);
flag=1;
continue;
}
l = Math.min(l,i.start);
r = Math.max(r,i.end);
}
if(flag==0)
{
Interval tmp = new Interval(l,r);
res.add(tmp);
}
return res;
}
}