本题主要难点是如何将重复的区间合并以及如何将合并好的区间重新插入到数组中。
结果数组的构建:定义一个List用于保存区间,当区间小于被插入区间时,直接放入list中,并记录插入元素的下标,改下标最后用于将新构建的区间插入到list中。当原区间与被插入区间有重复时,合并区间,当区间大于被插入区间时,直接放入list中。
合并区间:利用Matth工具类求取区间的最大和最小值,当数组中的区间与被插入区间存在重叠时,更新被插入区间的最大和最小值,然后用更新后的区间进行下一步的判断。
class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {
if(intervals==null || newInterval == null){
return intervals;
}
int index=0;
List<int[]> res = new ArrayList<>();
for(int[] interval: intervals){
if(interval[1]<newInterval[0]){
res.add(interval);
index++;
}else if(interval[0]>newInterval[1]){
res.add(interval);
}else {
newInterval[0] = Math.min(interval[0], newInterval[0]);
newInterval[1] = Math.max(interval[1], newInterval[1]);
}
}
res.add(index, newInterval);
return res.toArray(new int[res.size()][2]);
}
}