题目描述
给你一个 有序的 不相交区间列表 intervals 和一个要删除的区间 toBeRemoved, intervals 中的每一个区间 intervals[i] = [a, b] 都表示满足 a <= x < b 的所有实数 x 的集合。
我们将 intervals 中任意区间与 toBeRemoved 有交集的部分都删除。
返回删除所有交集区间后, intervals 剩余部分的 有序 列表。
示例 1:
输入:intervals = [[0,2],[3,4],[5,7]], toBeRemoved = [1,6]
输出:[[0,1],[6,7]]
示例 2:
输入:intervals = [[0,5]], toBeRemoved = [2,3]
输出:[[0,2],[3,5]]
提示:
1 <= intervals.length <= 10^4
-10^9 <= intervals[i][0] < intervals[i][1] <= 10^9
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-interval
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
class Solution {
public:
vector<vector<int>> removeInterval(vector<vector<int>>& intervals, vector<int>& toBeRemoved) {
vector<vector<int>> ans;
vector<int> tmp(2);
int len = intervals.size();
int s = toBeRemoved[0],e = toBeRemoved[1];
int i=0,j=len-1;
while(i<len && intervals[i][1] < s) ans.push_back(intervals[i++]);
if(i>=len) return ans;
while(j>=i && intervals[j][0] >= e) --j;
if(intervals[i][0] < s){
tmp[0] = intervals[i][0];tmp[1] = s;
ans.push_back(tmp);
}
if(e < intervals[j][1]){
tmp[0] = e; tmp[1] = intervals[j][1];
ans.push_back(tmp);
}
++j;
while(j<len) ans.push_back(intervals[j++]);
return ans;
}
};