题意:
给你几个区间,删除最少的区间个数,使得这几个区间不重叠。边界可以忽略。
思路:
有重叠的情况下,尽量使得区间分散一些。先把区间按左端点升序,如果相同,按右端点升序。从左端最小的开始放。如果左端点相同,删除右端点较长的区间。否则如果当前左端点比上一个区间的右端点小,删除右端点较长的区间。
代码:
bool cmp(Interval a,Interval b)
{
if(a.start==b.start)
return a.end<b.end;
return a.start<b.start;
}
class Solution {
public:
int eraseOverlapIntervals(vector<Interval>& intervals) {
int n = intervals.size();
if(n<2)
return 0;
sort(intervals.begin(),intervals.end(),cmp);
int s = intervals[0].start,e = intervals[0].end;
int ans = 0;
for(int i = 1;i<n;i++)
{
if(intervals[i].start==s)
{
ans++;
}
else if(intervals[i].start<e)
{
if(intervals[i].end>e)
ans++;
else
{
s = intervals[i].start;
e = intervals[i].end;
ans++;
}
}
else
{
s = intervals[i].start;
e = intervals[i].end;
}
}
return ans;
}
};