কম্পিউটার টিউটোরিয়াল

ওভারল্যাপিং ইন্টারভাল সরিয়ে নন-ওভারল্যাপিং করার জন্য ন্যূনতম ইন্টারভাল মুছে ফেলা C++-এ


এক সেট ইন্টারভাল দেওয়া আছে। লক্ষ্য হল ন্যূনতম কতগুলো ইন্টারভাল মুছে ফেললে বাকিগুলো নন-ওভারল্যাপিং হবে।

লালচী পদ্ধতি: ইন্টারভালগুলো শেষ সময় (end time) অনুযায়ী সর্ট করা হয়। তারপর সবচেয়ে আগে শেষ হওয়া ইন্টারভাল নেওয়া হয় এবং পরবর্তী ইন্টারভালের শুরু সময় বর্তমান শেষ সময়ের চেয়ে বড় বা সমান হলে নেওয়া হয়। মুছে ফেলার সংখ্যা = মোট - নেওয়া ইন্টারভাল।

উদাহরণ

ইনপুট: [[8,10],[3,5],[6,9]]

আউটপুট: ১

ব্যাখ্যা: [6,9] মুছে ফেললে বাকি [3,5] এবং [8,10] ওভারল্যাপ করে না।

C++ কোড উদাহরণ
#include 
using namespace std;

class Solution {
public:
    static bool cmp(vector& a, vector& b){
        return a[1] < b[1];
    }
    int eraseOverlapIntervals(vector>& 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;
    }
};

int main(){
    vector> v = {{8,10},{3,5},{6,9}};
    Solution ob;
    cout << ob.eraseOverlapIntervals(v);
    return 0;
}
আউটপুট

উপরোক্ত কোড রান করলে আউটপুট:

1
  1. এন্ডলেস পয়েন্টের সংখ্যা খুঁজে বের করা C++-এ

  2. Nতম হারমাইট সংখ্যা খুঁজে বের করা C++-এ

  3. C++-এ একটি সংখ্যা d যোগ করার পর ন্যূনতম সম্ভাব্য অঙ্কের যোগফল খুঁজুন

  4. C++-এ প্রতিপক্ষকে ধরতে ন্যূনতম রাউন্ড সংখ্যা বের করা