原题链接: https://leetcode.com/problems/non-overlapping-intervals/description/
题目: Given a collection of intervals, find the minimum number of intervals you need to remove to make the rest of the intervals non-overlapping.
Note:
You may assume the interval’s end point is always bigger than its start point.
Intervals like [1,2] and [2,3] have borders “touching” but they don’t overlap each other.
Solution: 题目给了我们一组区间,让我们求至少需要移除多少个区间,才能使余下的区间没有重叠。那么我们首先给这些区间排序,按照每个区间的结束时间end来排序,越早结束的排在前面。然后,我们可以采用贪心的策略,当我们发现一个区间和另一个区间重叠时,我们总是选择结束时间更早的那个区间,而移除结束时间更晚的那个区间,这样使得剩余的时间更多,可以选择更多的区间。
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
static bool comp(Interval a, Interval b) {
return a.end < b.end;
}
int eraseOverlapIntervals(vector<Interval>& intervals) {
if (intervals.empty()) return 0;
sort(intervals.begin(), intervals.end(), comp);
int needToRemove = 0;
int curEnd = intervals[0].end;
for (int i = 1; i < intervals.size(); i++) {
if (intervals[i].start < curEnd) {
needToRemove++;
} else {
curEnd = intervals[i].end;
}
}
return needToRemove;
}
};