题目
类型:Array
解题思路
对于区间S1=[l1,r1]
和S2=[l2,r2]
,如果它们之间没有重叠,说明S1在S2左侧,此时r1<l2
。或者S1在S2的右侧,此时l1>r2
。
二者均不满足则代表S1和S2有交集,交集为 max(l1,l2),min(r1,r2)
,并集为min(l1,l2),max(r1,r2)
代码
class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {
int left = newInterval[0];
int right = newInterval[1];
boolean placed = false;
List<int[]> ansList = new ArrayList<int[]>();
for (int[] interval : intervals) {
if (interval[0] > right) {
// 在插入区间的右侧且无交集
if (!placed) {
ansList.add(new int[]{left, right});
placed = true;
}
ansList.add(interval);
} else if (interval[1] < left) {
// 在插入区间的左侧且无交集
ansList.add(interval);
} else {
// 与插入区间有交集,计算它们的并集
left = Math.min(left, interval[0]);
right = Math.max(right, interval[1]);
}
}
if (!placed) {
ansList.add(new int[]{left, right});
}
int[][] ans = new int[ansList.size()][2];
for (int i = 0; i < ansList.size(); ++i) {
ans[i] = ansList.get(i);
}
return ans;
}
}