文章目录
题目
代码(7.26 首刷自解)
和Leetcode 452. 用最少数量的箭引爆气球一模一样,区别是这个题是找重复区间,那个题是找不重复区间,那么直接相减就可以了。
思路:
- 一看题需要感觉排序,但究竟怎么排序, 按起始点排还是终止点排?
- 排完序之后如何遍历,判断? 一二步是互相影响的其实,排序方式不同,遍历方式也会不同
- 直接求重复区间是复杂的, 转而求最大非重复区间,其实就是侧面求最小重复区间,这个转换思路要会,这个思路不仅适用于这个题
- 求最大非重复区间个数时,需要分割点来标记
class Solution {
public:
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
int n = intervals.size();
sort(intervals.begin(), intervals.end(), [&](vector<int>& a, vector<int>& b) {
return a[0] < b[0];
});
int index = intervals[0][1];
int res = 1;
for(int i = 1; i < n; i++) {
if(intervals[i][0] >= index) {
index = intervals[i][1];
res++;
} else {
index = min(index, intervals[i][1]);
}
}
return n-res;
}
};