- 算法
- 1.把前面不能和新插入区间合并的区间添加到结果:区间的右侧小于新插入区间的左侧
- 2.把中间可以和新插入区间合并的区间与新插入区间合并
- 区间的右侧大于等于新插入区间的左侧
- 区间的左侧小于等于新插入区间的右侧
- 3.把后面不能和新插入区间合并的区间添加到结果
public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {
ArrayList<Interval> result = new ArrayList<>(10);
int i = 0;
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(intervals.get(i).start, newInterval.start),
Math.max(intervals.get(i).end, newInterval.end));
i++;
}
result.add(newInterval);
while (i < intervals.size()) {
result.add(intervals.get(i++));
}
return result;
}
public int[][] insert(int[][] intervals, int[] newInterval) {
ArrayList<int[]> list = new ArrayList<>(10);
int i = 0;
while (i < intervals.length && intervals[i][1] < newInterval[0]) {
list.add(intervals[i++]);
}
while (i < intervals.length && intervals[i][0] <= newInterval[1]) {
newInterval = new int[]{
Math.min(newInterval[0], intervals[i][0]),
Math.max(newInterval[1], intervals[i][1])};
i++;
}
list.add(newInterval);
while (i < intervals.length) {
list.add(intervals[i++]);
}
int[][] result = new int[list.size()][];
for (int j = 0; j < list.size(); j++) {
result[j] = list.get(j);
}
return result;
}