Given a sorted list of disjoint intervals
, each interval intervals[i] = [a, b]
represents the set of real numbers x
such that a <= x < b
.
We remove the intersections between any interval in intervals
and the interval toBeRemoved
.
Return a sorted list of intervals
after all such removals.
Example 1:
Input: intervals = [[0,2],[3,4],[5,7]], toBeRemoved = [1,6] Output: [[0,1],[6,7]]
Example 2:
Input: intervals = [[0,5]], toBeRemoved = [2,3] Output: [[0,2],[3,5]]
Constraints:
1 <= intervals.length <= 10^4
-10^9 <= intervals[i][0] < intervals[i][1] <= 10^9
思路:就是分情况讨论,cur在delete的哪个部位,相应做处理;非常适合电面,这题;
class Solution {
public List<List<Integer>> removeInterval(int[][] intervals, int[] toBeRemoved) {
List<List<Integer>> lists = new ArrayList<List<Integer>>();
if(intervals == null || intervals.length == 0) {
return lists;
}
int removeStart = toBeRemoved[0];
int removeEnd = toBeRemoved[1];
for(int[] interval : intervals) {
int start = interval[0];
int end = interval[1];
// no overlap;
if(end <= removeStart || removeEnd <= start) {
lists.add(Arrays.asList(start, end));
}
// 前面overlap
if(start < removeStart && removeStart < end) {
lists.add(Arrays.asList(start, removeStart));
}
// 完全在delete中间;
if(removeStart < start && end < removeEnd) {
continue;
}
// 后面overlap;
if(start < removeEnd && removeEnd < end) {
lists.add(Arrays.asList(removeEnd, end));
}
}
return lists;
}
}