Insert Interval 面试题leetcode.

刚开始做这个题的时候绕了好大的圈,对问题的分析不全面,没能考虑所有情况,做的很纠结。后来看了下大神的做法很受启发,改了改代码,最终提交了。

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;
            }
        }
原文地址:https://www.cnblogs.com/weilq/p/3628568.html