Description
给定
Constraints
要求时间复杂度不超过
Solution
很多年前做过的题,就是反过来求的最多不重叠区间,结论就是按右端点排序。但是为什么呢?
如果不介意看我用Microsoft Paint 11.2205.9.0
画出来的玩意,那应该可以解释一下
首先假设从左到右处理,最左端的若干区间并没有重叠部分,那我们自然是选择最左边的区间开始;但是如果有重叠部分呢?比如我们现在选取了最左边的左端点
如果此时只能重新选择三选一,显然选择
如果是选择了
选完单个区间(右端点
整个过程是很直观的,按右端点排序挑选,对
更抽象点来看,这个从左到右挑选的过程就像上图一样,整个框架对应若干区间的空间,黄色往右的区域得到的最优解肯定大于等于绿色往右得到的最优解
Code
class Solution {
public:
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
auto &inv = intervals;
sort(inv.begin(), inv.end(), [](auto &l, auto &r) {
return l[1] < r[1];
});
int ans = 0;
int rmost = -1e5;
for(auto &i : inv) {
if(i[0] >= rmost) {
rmost = i[1];
continue;
}
ans++;
}
return ans;
}
};