无重叠区间

无重叠区间

题目

给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。
注意 只在一点上接触的区间是不重叠的。例如 [1, 2] 和[2, 3]是不重叠的。

示例

image

算法流程

1.先对区间进行排序,可以通过对区间左边界或右边界进行排序。
2.我们这里采用右边界先进行从小到大进行排序。
3.排序后,我们需要对每个区间找到结束边界的最小值。如图

image

4.记录每次重叠的区间个数。

算法实现

class Solution {
public:
    static bool compareValue(const vector<int> a, const vector<int> b){
        return a[0] < b[0];
    }
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        sort(intervals.begin(), intervals.end(), compareValue);
        int cnt = 0;
        int end = intervals[0][1];
        for(int i = 1; i < intervals.size(); i++){
            if(intervals[i][0] >= end) end = intervals[i][1];
            else{
                end = min(intervals[i][1], end);
                cnt++; 
            }
        }
        return cnt;
    }
};
posted @ 2026-03-02 11:00  heyuikn  阅读(0)  评论(0)    收藏  举报