这题的解答从这里来的
/*
* 基本思路就是先扫描走到新的interval应该插入的位置(intervals.get(i).end<newInterval.start),确定new interval的start坐标(取小的)。接下来就是插入新的interval并检查后面是否冲突,一直到新的interval的end小于下一个interval的start,然后取新interval和当前interval中end大的即可
*/
public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {
ArrayList<Interval> res = new ArrayList<Interval>();
if(intervals.size()==0)
{
res.add(newInterval);
return res;
}
//先往右走,找到start的位置
int i=0;
while(i<intervals.size() && intervals.get(i).end<newInterval.start)
{
res.add(intervals.get(i));
i++;
}
//更改start
if(i<intervals.size())
newInterval.start = Math.min(newInterval.start, intervals.get(i).start);
//继续往右走,更改end
while(i<intervals.size() && intervals.get(i).start<=newInterval.end)
{
newInterval.end = Math.max(newInterval.end, intervals.get(i).end);
i++;
}
//加进list里面
res.add(newInterval);
//加剩下的
while(i<intervals.size())
{
res.add(intervals.get(i));
i++;
}
return res;
}