无重叠区间
无重叠区间
题目
给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。
注意 只在一点上接触的区间是不重叠的。例如 [1, 2] 和[2, 3]是不重叠的。
示例
![]() |
|---|
算法流程
1.先对区间进行排序,可以通过对区间左边界或右边界进行排序。
2.我们这里采用右边界先进行从小到大进行排序。
3.排序后,我们需要对每个区间找到结束边界的最小值。如图
![]() |
|---|
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;
}
};



浙公网安备 33010602011771号