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

C++-এ সাবঅ্যারে ফ্লিপ করে ০-এর সংখ্যা সর্বাধিক করা

সমস্যা বিবরণ

একটি বাইনারি অ্যারে দেওয়া আছে, একটি সাবঅ্যারে ফ্লিপ করার অনুমতিতে অ্যারেতে সর্বোচ্চ ০ সংখ্যা বের করুন। একটি ফ্লিপ অপারেশন সব ০ কে ১ এবং ১ কে ০ করে দেয়।

যদি arr1 = {1, 1, 0, 0, 0, 0, 0} হয়

যদি প্রথম ২টি ১ কে ০-তে ফ্লিপ করি, তবে আমরা ৭ আকারের সাবঅ্যারে পাই নিচের মতো:

{0, 0, 0, 0, 0, 0, 0}

অ্যালগরিদম

1. সব সাবঅ্যারে বিবেচনা করুন এবং (১-এর সংখ্যা) - (০-এর সংখ্যা) সর্বোচ্চ হয় এমন সাবঅ্যারে খুঁজে বের করুন। 
2. এই মানকে maxDiff ধরুন। অবশেষে মূল অ্যারেতে ০-এর সংখ্যা + maxDiff রিটার্ন করুন।

উদাহরণ

#include <bits/stdc++.h> 
using namespace std; 
int getMaxSubArray(int* arr, int n) { 
    int maxDiff = 0; 
    int zeroCnt = 0; 
    for (int i = 0; i < n; ++i) { 
        if (arr[i] == 0) ++zeroCnt; 
        int cnt0 = 0, cnt1 = 0; 
        for (int j = i; j < n; ++j) { 
            if (arr[j] == 1) ++cnt1; 
            else ++cnt0; 
            maxDiff = max(maxDiff, cnt1 - cnt0); 
        } 
    } 
    return zeroCnt + maxDiff; 
} 
int main() { 
    int arr[] = {1, 1, 0, 0, 0, 0, 0}; 
    int n = sizeof(arr) / sizeof(arr[0]); 
    cout << "Maximum subarray size = " << getMaxSubArray(arr, n) << endl; 
    return 0; 
}

আউটপুট

Maximum subarray size = 7
  1. C++-এ সাবঅ্যারে ফ্লিপ করে ০-এর সংখ্যা সর্বাধিক করা

  2. C++-এ অ্যারিথমেটিক নম্বর

  3. C++-এ ভেরিয়েবল সংখ্যক আর্গুমেন্ট (Variable Arguments)

  4. C++-এ CHAR_BIT