链接:
https://leetcode-cn.com/problems/non-overlapping-intervals/
描述:
示例和提示:
代码:
方法一:
class Solution {
public:
static bool cmp (const vector<int>& a, const vector<int>& b) {
return a[1] < b[1];
}
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
if (intervals.size() == 0) return 0;
sort(intervals.begin(), intervals.end(), cmp);
int count = 1;
int end = intervals[0][1];
for (int i = 1; i < intervals.size(); i++) {
if (end <= intervals[i][0]) {
end = intervals[i][1];
count++;
}
}
return intervals.size() - count;
}
};
方法一代码分析:
按照每组数据的第二个数据从小到大进行排序
然后进行排除:
当后一个和前一个重叠时,删除后一个,依次下去
方法二:
bool cmp(const vector<int>& a, const vector<int>& b)
{
return a[0] < b[0];
}
class Solution {
public:
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
if (intervals.size() == 0) return 0;
sort(intervals.begin(), intervals.end(), cmp);
int end = intervals[0][0], prev = 0, count = 0;
for (int i = 1; i < intervals.size(); i++) {
if (intervals[prev][1] > intervals[i][0]) {
if (intervals[prev][1] > intervals[i][1]) prev = i;
count++;
}
else prev = i;
}
return count;
}
};
方法二分析:
我们按照起点的从小到大进行排序
遇见重叠,删除末尾最大的