要求:最少删几个区间使其不重叠
思路:贪心,一开始删重叠次数最多的,事实证明过不了,后来看了题解,贪心就是要选择右端点小的先放,如果右端点大的话很快塞满了,所以先按右端点排序,然后从左遍历,遇到两个重叠的贪心当然是删右边这个,过了,玄学
class Solution {
public:
static bool cmp(vector<int> &a,vector<int> &b){
return a[1]<b[1];
}
bool isoverlap(vector<int> &a,vector<int> &b){
if(a.size()==0)return false;
return a[1]>b[0]?true:false;
}
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
sort(intervals.begin(),intervals.end(),cmp);
int n=intervals.size();
int delnum=0;
int index=1;
for(int i=0;i<n,index<n;){
if(isoverlap(intervals[i],intervals[index])){
intervals[index].clear();
++delnum;
++index;
}
else i=index++;
}
return delnum;
}
};