思路

贪心算法
因为区间的右边界end越小,可以给后面留到的空间就越大。所以按照区间的右边界从小到大进行排序,每次都选右边界最小并且左边界大于前一个区间右边界的区间,最后可以累加得到最大不重叠区间的个数m,最后用总区间个数-m即为要删去的最小区间数。
 1 class Solution {
 2 private:
 3     // 调用类内的函数必须需要对象才可以,所以比较器应该定义为static的
 4     // a[0]表示区间a的左边界,a[1]表示区间a右边界
 5     static bool cmp(vector<int> a, vector<int> b) {
 6         return a[1] < b[1];
 7     }
 8 public:
 9     int eraseOverlapIntervals(vector<vector<int>>& intervals) {
10         if(intervals.size() <= 1) {
11             return 0;
12         }
13         sort(intervals.begin(), intervals.end(), cmp);
14         // m表示最大不重叠区间的个数
15         int m = 1;
16         int pre = 0;
17         for(int i = 1; i < intervals.size(); ++i) {
18             // 后一个区间的左边界 >= 前一个区间的右边界
19             if(intervals[i][0] >= intervals[pre][1]) {
20                 m++;
21                 pre = i;
22             }
23         }
24 
25         return intervals.size() - m;
26 
27     }
28 };

 

相关文章:

  • 2021-05-22
  • 2022-12-23
  • 2022-12-23
  • 2021-07-11
  • 2022-01-09
  • 2021-07-04
猜你喜欢
  • 2020-12-31
  • 2022-01-21
  • 2021-11-22
  • 2022-01-28
  • 2021-06-09
  • 2021-02-19
相关资源
相似解决方案