描述
给定一个无重叠的,按照区间起点升序排列的区间列表,在列表中插入一个新区间,如果有原区间有重合,则合并,请返回插入后的区间列表。
分析
和LeetCode56. 合并区间一样的,都是融合区间。
对区间数组按照start由低到高排序,然后遍历,如果当前区间的start比上一个区间的end小融合当前区间,否则把上一个区间加入到结果集合中。
import java.util.*;
/*
* public class Interval {
* int start;
* int end;
* public Interval(int start, int end) {
* this.start = start;
* this.end = end;
* }
* }
*/
public class Solution {
public Interval[] insertInterval (Interval[] Intervals, Interval newInterval) {
if(Intervals.length == 0){
return new Interval[]{newInterval};
}
Interval[] cp = Arrays.copyOf(Intervals,Intervals.length+1);
cp[cp.length - 1] = newInterval;
Arrays.sort(cp,(a,b)->(a.start - b.start));
List<Interval> ans = new ArrayList<>();
int left = cp[0].start;
int right = cp[0].end;
for(int i = 1; i < cp.length; i++){
if(cp[i].start <= right){
right = Math.max(right,cp[i].end);
}else{
ans.add(new Interval(left,right));
left = cp[i].start;
right = cp[i].end;
}
}
ans.add(new Interval(left,right));
return ans.toArray(new Interval[ans.size()]);
}
}