ধরুন আমাদের একটি সেট অন্তরাল আছে; আমাদের ন্যূনতম সংখ্যক ব্যবধান খুঁজে বের করতে হবে যা বাকি ব্যবধানগুলিকে অ-ওভারল্যাপিং করতে সরানো উচিত। সুতরাং যদি ব্যবধান [[8,10],[3,5],[6,9]] হয়, তাহলে আউটপুট হবে 1, যেমন আমাদেরকে [6,9] অপসারণ করতে হবে যাতে অন্য সবগুলো অ-ওভারল্যাপিং হয়। .
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- n :=অ্যারের আকার
- যদি n 0 হয়, তাহলে 0 ফেরত দিন
- গণনা :=1
- ব্যবধানের শেষ সময়ের উপর ভিত্তি করে অ্যারে সাজান
- শেষ :=প্রথম বিরতির শেষ তারিখ
- আমি 1 থেকে n – 1
- পরিসরে
- যদি arr[i]>=শেষের সময় শুরু হয়, তাহলে
- শেষ :=শেষ সময় [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