tag:贪心算法——区间问题
难度:meidum
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。
注意: 可以认为区间的终点总是大于它的起点。 区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。
示例 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 解释: 你不需要移除任何区间,因为它们已经是无重叠的了。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/non-overlapping-intervals 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Note:这里同样用到了贪心算法中的排序,在排序中使用到了std::sort(),具体用法详见sort排序函数用法,另外也用到了c++中的lambda函数,可以参考C++11 Lambda函数
需要根据实际情况判断按区间开头排序还是按区间结尾排序
class Solution { public: int eraseOverlapIntervals(vector<vector<int>>& intervals) { //判空 if(intervals.empty()){ return 0; } int len = intervals.size(); //std::sort() sort(intervals.begin(),intervals.end(),[](vector<int> a,vector<int> b){ return a[1] < b[1]; }); int res = 0; int prev = intervals[0][1]; for(int i=1;i<len;i++){ if(intervals[i][0]<prev){ res++; }else{ prev = intervals[i][1];//这里第一次写在了判断的外面,错误记录可以查leetcode } } return res; } };