Insert Interval:
题意:
主要考虑以下情况:
如果新区间的end < 当前区间的start,不用找下去了,把新区间插入到当前区间的前面,然后返回。
如果当前区间的end小于新区间的start,继续遍历找下一个区间。
如果当前区间和新区间发生重合,则start取两者最小的start,end取两者最大的end,生成一个新的区间。
继续遍历。
如果遍历一直到末尾也没发生区间重合,就把新区间插入到原来ArrayList的末尾。
代码:
public class Solution {
public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
List<Interval> result = new LinkedList<>();
int i = 0;
// add all the intervals ending before newInterval starts
while (i < intervals.size() && intervals.get(i).end < newInterval.start)
result.add(intervals.get(i++));
while (i < intervals.size() && intervals.get(i).start <= newInterval.end) {
newInterval = new Interval(
Math.min(newInterval.start, intervals.get(i).start),
Math.max(newInterval.end, intervals.get(i).end));
i++;
}
result.add(newInterval);
while (i < intervals.size()) {
result.add(intervals.get(i++));
}
return result;
}
}