原题链接:Leecode 435. 无重叠区间
看到这个博主说这是罗志祥算法,笑死我了 2.1.2 基本算法_贪心算法
贪心策略(参考链接:贪心算法之区间问题详解 )
在选择要保留区间时,区间的结尾很重要:选择的区间结尾越小,余留给其它区间的空间就越大,就
越能保留更多的区间。因此,我们采取的贪心策略为,优先保留结尾小且不相交的区间。具体实现方法为:
1.先把区间按照结尾的大小进行增序排序,
2.每次选择结尾最小且和前一个选择的区间不重叠的区间。
class Solution {
public:
//二维数组按第二个数从小到大排序
static bool cmp(const vector<int>& a,const vector<int>& b)
{
return a.back()<b.back();
}
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
sort(intervals.begin(),intervals.end(),cmp);
int m=intervals.size(),tmp=intervals[0][1];
int res=1;
for(int i=1;i<m;i++)
{ //如果当前区间的左端点>=之前的最小右端点
if(intervals[i][0]>=tmp)
{
res++;//包含的区间加1
tmp=intervals[i][1];//最小右端点更新
}
}
return m-res;
}
};