问题:给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。
输入:vector<vector<int>> intervals
输出:移除区间的最小数量
思路:贪心,选择最先结束的课程,与其冲突的课程去除。
代码:
class Solution {
public:
static bool comp(vector<int> interval1, vector<int> interval2) // sort的比较函数要求为全局函数或者静态成员函数
{
return interval1[1]<interval2[1];
}
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
int count=0;
int size=intervals.size();
if(size<=1)
return count;
sort(intervals.begin(),intervals.end(),comp);
int left=intervals[0][1];
for(int i=1;i<size;++i)
{
if(left>intervals[i][0])
++count;
else
left=intervals[i][1];
}
return count;
}
};
复杂度分析:时间复杂度为O(nlogn),空间复杂度为O(1)。