मान लीजिए कि हमारे पास अंतराल का एक सेट है; हमें शेष अंतरालों को गैर-अतिव्यापी बनाने के लिए हटाए जाने वाले अंतरालों की न्यूनतम संख्या ज्ञात करनी होगी। इसलिए यदि अंतराल [[8,10],[3,5], [6,9]] हैं, तो आउटपुट 1 होगा, क्योंकि हमें अन्य सभी को गैर-अतिव्यापी बनाने के लिए [6,9] को हटाना होगा। ।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- n :=सरणी का आकार
- अगर n 0 है, तो 0 लौटाएं
- गिनती :=1
- अंतराल के अंत समय के आधार पर सरणी को क्रमबद्ध करें
- समाप्ति:=पहले अंतराल की समाप्ति तिथि
- मैं के लिए 1 से n - 1 की सीमा में
- यदि गिरफ्तारी का प्रारंभ समय[i]>=अंत, तो
- समाप्ति:=गिरफ्तारी का समाप्ति समय[i]
- गणना में 1 की वृद्धि करें
- यदि गिरफ्तारी का प्रारंभ समय[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