程序查找要删除的最小间隔数,以消除C ++中的重叠

假设我们有一组间隔;我们必须找到应删除的最小间隔数,以使其余间隔不重叠。因此,如果间隔为[[8,10],[3,5],[6,9]],则输出将为1,因为我们必须删除[6,9]以使所有其他区域不重叠。

为了解决这个问题,我们将遵循以下步骤-

  • n:=数组大小

  • 如果n为0,则返回0

  • 数:= 1

  • 根据间隔的结束时间对数组排序

  • 结束:=第一个间隔的结束日期

  • 当我在1到n – 1的范围内时

    • end:= arr [i]的结束时间

    • 计数增加1

    • 如果arr [i]的开始时间> =结束,则

    • 返回n –计数

    让我们看下面的实现以更好地理解-

    示例

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       static bool cmp(vector <int>& a, vector <int>& b){
          return a[1] < b[1];
       }
       int eraseOverlapIntervals(vector<vector<int>>& arr) {
          int n = arr.size();
          if(!n)return 0;
             int cnt = 1;
             sort(arr.begin(), arr.end(), cmp);
             int end = arr[0][1];
             for(int i = 1; i < n; i++){
                if(arr[i][0] >= end){
                   end = arr[i][1];
                   cnt++;
             }
          }
          return n - cnt;
       }
    };
    main(){
       vector<vector<int>>
       v = {{8,10},{3,5},{6,9}};
       Solution ob;
       cout << (ob.eraseOverlapIntervals(v));
    }

    输入值

    {{8,10},{3,5},{6,9}}

    输出结果

    1
    猜你喜欢