区间贪心的解法背过:
- 按区间右端点大小来从小到大排序
- 遍历排序后的数组,判断左端点与上一个右端点的大小,如果小,则删去这个区间,如果大,则将该区间的右端点更新为比较时候的右端点的值
注意sort重载时的写法,这里要使用引用传递,不然会超时
Code
class Solution {
public:
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
int res = 0;
if (intervals.empty()) return res;
sort(intervals.begin(), intervals.end(), [](vector<int>&a, vector<int>&b) { // 这里要是没有传引用超时
return a[1] < b[1];
});
int prev = intervals[0][1];
for (int i = 1; i < intervals.size(); i++) {
if (intervals[i][0] < prev) res++;
else {
prev = intervals[i][1];
}
}
return res;
}
};