• 1288. 删除被覆盖区间


     

    labuladong 题解思路
    难度中等

    给你一个区间列表,请你删除列表中被其他区间所覆盖的区间。

    只有当 c <= a 且 b <= d 时,我们才认为区间 [a,b) 被区间 [c,d) 覆盖。

    在完成所有删除操作后,请你返回列表中剩余区间的数目。

    示例:

    输入:intervals = [[1,4],[3,6],[2,8]]
    输出:2
    解释:区间 [3,6] 被区间 [2,8] 覆盖,所以它被删除了。
    

    提示:​​​​​​

    • 1 <= intervals.length <= 1000
    • 0 <= intervals[i][0] < intervals[i][1] <= 10^5
    • 对于所有的 i != jintervals[i] != intervals[j]

    方法1:左右边界都升序

    class Solution {
    public:
        int removeCoveredIntervals(vector<vector<int>>& intervals) {
            
            sort(begin(intervals), end(intervals));
            int res = 1,left = intervals[0][0],right = intervals[0][1];
            for(int i = 1;i < intervals.size();i++) {
                auto v = intervals[i];
                if (v[0]==left) { 
                    if (v[1] == right) { //[1,3] + [1,3]
                        ;
                    } else { // v[1] > right [1,3] + [1,5]
                        right = v[1];
                    }
                } else { //v[1]>left
                    if (v[1]>right) { //  [1,3] + [2,4]
                        right = v[1];
                        left = v[0];
                        res++;
                    } else { //  v[1] < right // [1,3] + [2,3]
                        ;//被吃掉
                    }
                }
            }
            return res;
        }
    };
    class Solution {
    public:
        int removeCoveredIntervals(vector<vector<int>>& intervals) {
            
            // 按照起点升序排列,起点相同时降序排列
            sort(begin(intervals), end(intervals),
            [](const vector<int> &a, const vector<int> &b) {
            return a[0] != b[0] ? a[0] < b[0] : a[1] > b[1];
            });        
            
            int res = 0;
            int left = INT_MAX;
            int right = INT_MIN;
            for(int i = 0;i < intervals.size();i++) {
                if (intervals[i][1] > right && left != intervals[i][0]) {
                    left = intervals[i][0];
                    right = intervals[i][1];
                    res++;
                }
            }
            return res;
        }
    };
  • 相关阅读:
    poj 3422 Kaka's Matrix Travels
    poj 1815 Friendship
    poj 1966 Cable TV Network
    黑暗
    【bzoj2741】[FOTILE模拟赛] L
    整数拆分
    LCIS
    原题的旅行
    【codeforces gym】Increasing Costs
    【noip模拟】D(==)
  • 原文地址:https://www.cnblogs.com/zle1992/p/16570674.html
Copyright © 2020-2023  润新知