总体思路:贪心算法。先按照每个区间末尾从小到大排序(因为要留下最多,末尾越小的能留下更多),之后从左往右进行遍历,若下一个区间的开头小于前一个区间的末尾则移除,直到结束。
class Solution {
public:
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end(), myFunction);
int removed = 0, pre = intervals[0][1];
for (int i = 1; i < intervals.size(); i++) {
if (intervals[i][0] < pre) {
removed++;
}
else {
pre = intervals[i][1];
}
}
return removed;
}
static bool myFunction(vector<int> &a, vector<int> &b) {
return a[1] < b[1];
}
};
c++中的sort可以对vector自定义排序规则——链接如下C++中,结构体vector使用sort排序_凌云星逝的博客-CSDN博客_c++ vector sort