比如找出[ [1,2], [2,3], [3,4], [1,3] ]中不重复子区间的最大个数
这个算法可以运用到生活中的很多问题中
直接上代码:
class Solution {
public:
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
if(intervals.empty()) return 0;
//先对子区间进行排序,按结束时间从小到大进行排序
sort(intervals.begin(),intervals.end(),[](const vector<int>& a,const vector<int>& b){
return a[1]<b[1];
});
//肯定排在第一个的结束时间最早
int end_min=intervals[0][1];
//最早结束的子区间一开始就算进去
int count=1;
for(vector<int> interval:intervals){
if(interval[0]>=end_min){
count++;
//更新最小区间
end_min=interval[1];
}
}
return count;
}
};