Leetcode 5113:删除区间

题目描述

给你一个 有序的 不相交区间列表 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;
    }
};
发布了584 篇原创文章 · 获赞 9 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_35338624/article/details/103333578