刚开始做这个题的时候绕了好大的圈,对问题的分析不全面,没能考虑所有情况,做的很纠结。后来看了下大神的做法很受启发,改了改代码,最终提交了。
public static ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) { ArrayList<Interval> ips=null; ips=new ArrayList<Interval>(); int p=0; int q=intervals.size()-1; if(intervals.size()==0){ ips.add(newInterval); return ips; }else{ if(intervals.get(p).start>newInterval.end){ ips.add(newInterval); ips.addAll(intervals); }else if(intervals.get(q).end<newInterval.start){ ips.addAll(intervals); ips.add(newInterval); }else { while(p<=q){ if(intervals.get(q).start>newInterval.end){ q--; }else if(intervals.get(p).end<newInterval.start){ ips.add(intervals.get(p)); p++; }else { break; } } if(p<=q){ ips.add(new Interval( intervals.get(p).start<newInterval.start?intervals.get(p).start:newInterval.start, intervals.get(q).end>newInterval.end?intervals.get(q).end:newInterval.end )); q++; }else{ ips.add(newInterval); q++; } for(;q<intervals.size();q++){ ips.add(intervals.get(q)); } } return ips; } }