1、
给出一个无重叠的按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
插入区间[2, 5] 到 [[1,2], [5,9]],我们得到 [[1,9]]。
插入区间[3, 4] 到 [[1,2], [5,9]],我们得到 [[1,2], [3,4], [5,9]]。
2、思路:
1、 在头插入
2、在中间插入
3、在尾插入。
第1,3好处理,直接判断是在头还是在尾,直接加入就好。 然后第2种需要判断插入后的区间是否可以和其他的区间合并。 所以要扫描一遍,判断他前后有没有可以合并的区间,然后把他们合并在一起。
3、代码:
/** * 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) { if (newInterval == null || intervals == null) { return intervals; } ArrayList<Interval> results = new ArrayList<Interval>(); int insertPos = 0; for (Interval interval : intervals) { if (interval.end < newInterval.start) { results.add(interval); insertPos++; } else if (interval.start > newInterval.end) { results.add(interval); } else { newInterval.start = Math.min(interval.start, newInterval.start); newInterval.end = Math.max(interval.end, newInterval.end); } } results.add(insertPos, newInterval); return results; } }