插入区间

来源:互联网 发布:华为平板有windows系统 编辑:程序博客网 时间:2024/06/05 02:54

给出一个无重叠的按照区间起始端点排序的区间列表。

在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

样例

插入区间[2, 5] 到 [[1,2], [5,9]],我们得到 [[1,9]]

插入区间[3, 4] 到 [[1,2], [5,9]],我们得到 [[1,2], [3,4], [5,9]]

/**
 * Definition of Interval:
 * public classs Interval {
 *     int start, end;
 *     Interval(int start, int end) {
 *         this.start = start;
 *         this.end = end;
 *     }
 */


class Solution {
    /**
     * Insert newInterval into intervals.
     * @param intervals: Sorted interval list.
     * @param newInterval: A new interval.
     * @return: A new sorted interval list.
     */
    public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {
        ArrayList<Interval> result = new ArrayList<Interval>();
        // write your code here
        if(intervals.size()==0){
          result.add(newInterval);
          return result;
        }
        int i;
        for(i =0;i<intervals.size();i++){
            if(newInterval.start > intervals.get(i).end)//当插入序列大于当前序列
                 result.add(intervals.get(i));
            else if(newInterval.end < intervals.get(i).start){//插入序列小于当前序列,直接插入
                result.add(newInterval);
                break;
            }
            else{//区间合并
                newInterval.start = Math.min(newInterval.start,intervals.get(i).start);
                newInterval.end = Math.max(newInterval.end,intervals.get(i).end);
            }
            if(i==intervals.size()-1)//最后一个数据为合并序列
               result.add(newInterval);
        }
        while(i<intervals.size()){
            result.add(intervals.get(i));
            i++;
        }
        return result;
    }
}

0 0