Insert Intervals leetcode

这个题其实不难,但是自己再遇到后当场还是很不熟悉。其实就其原因主要是没有理解清楚造成的。 大概的思路是 把 newInterval 跟当前比较,要么newInterval 在左边,要么在右边,要么交叉 那就要merge。

  之前不熟悉的时候主要是考虑到 如果 newInterval 包含几个区域的情况,这样原有的arraylist 后面可能还有重复的interval。 所以为了避免这种情况索性,new 一个新的 ArrayList 来作为结果。 这样的话,只有在 newInterval 在当前interval 左边,而且 new Interval 还没有被 add 的情况下才 add interval, 然后对merge的情况,只是 update了 newInterval的值,这样能够保证不会添加到重复的interval。 而且记住,最后要check 一下newInterval有没有被添加,因为可能newInterval在所有list 元素的右边。


public class Solution {
    public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {
    	int i = 0; ArrayList<Interval> rlt = new ArrayList<Interval>();
    	boolean flag = false;
    	if(intervals.size() < 1) {
    		rlt.add(newInterval);
    		return rlt;
    	}
        while(i < intervals.size()){
        	Interval temp = intervals.get(i);
        	if(temp.end < newInterval.start){
        		rlt.add(temp);
        	} else if( temp.start > newInterval.end){
        	    if(flag == false){
        	    rlt.add(newInterval);
        	    flag = true;
        	    }
        		rlt.add(temp);
        	}
        	else {
        		newInterval.start = newInterval.start < temp.start ? newInterval.start : temp.start;
        		newInterval.end = newInterval.end > temp.end ? newInterval.end : temp.end;
        	}
        	i ++ ;
           }
           if(flag == false) rlt.add(newInterval);
        return rlt;
    }
}



你可能感兴趣的:(Insert Intervals leetcode)