मान लीजिए हमारे पास अंतरालों का संग्रह है; शेष अंतरालों को गैर-अतिव्यापी बनाने के लिए हमें कम से कम अंतरालों को निकालना होगा। इसलिए यदि अंतराल [[1,2], [2,3], [3,4], [1,3]] हैं, तो आउटपुट 1 होगा, क्योंकि हमें [1,3] को हटाना होगा अन्य सभी गैर-अतिव्यापी हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
n :=सरणी का आकार
-
अगर n 0 है, तो वापस 0
-
गिनती :=1
-
अंतराल के अंत समय के आधार पर सरणी को क्रमबद्ध करें
-
समाप्ति :=पहले अंतराल की समाप्ति तिथि
-
मैं के लिए 1 से n - 1 की सीमा में
-
यदि गिरफ्तारी का प्रारंभ समय [i]>=अंत, तो
-
समाप्ति:=गिरफ्तारी का समाप्ति समय[i]
-
1 द्वारा गिनती बढ़ाएं
-
-
-
वापसी 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 = {{1,2},{1,2},{1,2}}; Solution ob; cout << (ob.eraseOverlapIntervals(v)); }
इनपुट
[[1,2],[1,2],[1,2]]
आउटपुट
2