因为原来的intervals是不想交且的,所以对原来的每一个区间,和要插入的区间对比,考虑如下情况:
绿色表示当前的intervals[i],黑色表示新的interval。
/**
* 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 ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {
ArrayList<Interval> rst=new ArrayList<Interval>();
int n=intervals.size();
Interval tmp;
int c_x=newInterval.start,c_y=newInterval.end;
int flag=0;
for(int i=0;i<n;i++)
{
tmp=new Interval(intervals.get(i).start,intervals.get(i).end);
if(flag==0)
{
if(tmp.end<c_x)
rst.add(tmp);
else if(tmp.end>=c_x && tmp.end<=c_y)
{
if(c_x>=tmp.start)
c_x=tmp.start;
}
else if(tmp.start>=c_x && tmp.start<=c_y)
{
if(c_y<=tmp.end)
c_y=tmp.end;
}
else if(tmp.start<c_x && tmp.end>c_y)
{
c_x=tmp.start;
c_y=tmp.end;
}
else if(tmp.start>c_y)
{
rst.add(new Interval(c_x,c_y));
flag=1;
rst.add(tmp);
}
}
else
rst.add(tmp);
}
if(flag==0)
rst.add(new Interval(c_x,c_y));
//for(int i=0;i<rst.size();i++)
// System.out.println(rst.get(i).start+" "+rst.get(i).end);
return rst;
}
}