给定一些区间,找到需要移除的最小区间数,以使其余的区间不重叠。
样例
样例1:
输入: [ [1,2], [2,3], [3,4], [1,3] ]
输出: 1
解释: [1,3] 被移除后,剩下的区间将不再重叠。
样例2:
输入: [ [1,2], [1,2], [1,2] ]
输出: 2
解释: 需要将两个 [1,2] 移除使得剩下的区间不重合。
样例3:
输入: [ [1,2], [2,3] ]
输出: 0
解释: 不需要移除任何区间因为本身就没有任何区间重合。
注意事项
- 可以假设区间的终止点一定比起始点大。
- 区间[1,2]和[2,3]虽然边缘重合,但是它们并未重叠。
输入测试数据 (每行一个参数)如何理解测试数据?
/**
* Definition of Interval:
* classs Interval {
* int start, end;
* Interval(int start, int end) {
* this->start = start;
* this->end = end;
* }
* }
*/
bool mycmp(Interval& A, Interval& B)
{
if(A.end < B.end)
return true;
return false;
}
class Solution {
public:
/**
* @param intervals: a collection of intervals
* @return: the minimum number of intervals you need to remove
*/
int eraseOverlapIntervals(vector<Interval> &intervals) {
// write your code here
if(intervals.size() == 0)
return 0;
sort(intervals.begin(), intervals.end(), mycmp);
int count = 1;
int end = intervals[0].end;
for(int i = 0; i < intervals.size(); i++)
{
if(intervals[i].start >= end)
{
count++;
end = intervals[i].end;
}
}
return intervals.size()-count;
}
};