zoukankan      html  css  js  c++  java
  • LeetCode 435. 无重叠区间

    思路

    贪心算法
    因为区间的右边界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 };
  • 相关阅读:
    ZOJ 3556
    ZOJ 2836
    HDU 2841
    HDU 4135
    POJ 3695
    POJ 2773
    HDU 4407
    HDU 1796
    ZOJ 3688
    ZOJ 3687
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/13929808.html
Copyright © 2011-2022 走看看