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

সি++ প্রোগ্রাম: বাইনারি অ্যারে পার্টিশন করতে ন্যূনতম টগল (0s তারপর 1s)


সমস্যা বিবরণ

শুধু ০ এবং ১ ধারণকারী n সাইজের একটি অ্যারে দেওয়া আছে। ন্যূনতম টগল (০ থেকে ১ বা ১ থেকে ০) খুঁজে বের করতে হবে যাতে অ্যারেটি পার্টিশনড হয়, অর্থাৎ আগে সব ০ তারপর সব ১ থাকে।

উদাহরণ

যদি arr[] = {1, 0, 0, 1, 1, 1, 0} হয়, তবে ২টি টগল প্রয়োজন: প্রথম ১ এবং শেষ ০ টগল করলে।

অ্যালগরিদম

  • প্রশ্নটি গৌর করলে দেখা যাবে ০ থেকে n-1 পর্যন্ত অবশ্যই একটি পয়েন্ট থাকবে যার বামপাশে সব ০ এবং ডানপাশে সব ১ থাকবে।
  • যে ইন্ডেক্সগুলো এই নিয়ম মানেন না, সেগুলো টগল করতে হবে। বাম থেকে ডানে ০ গুনতে হবে।

সি++ কোড উদাহরণ

#include <bits/stdc++.h>
using namespace std;

int getMinToggles(int* arr, int n) {
    int zeroCnt[n + 1] = {0};
    for (int i = 1; i <= n; ++i) {
        if (arr[i - 1] == 0)
            zeroCnt[i] = zeroCnt[i - 1] + 1;
        else
            zeroCnt[i] = zeroCnt[i - 1];
    }
    int result = n;
    for (int i = 1; i <= n; ++i)
        result = min(result, i - zeroCnt[i] + zeroCnt[n] - zeroCnt[i]);
    return result;
}

int main() {
    int arr[] = {1, 0, 0, 1, 1, 1, 0};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "Minimum toggles = " << getMinToggles(arr, n) << endl;
    return 0;
}

আউটপুট

Minimum toggles = 2

  1. C++-এ বাইনারি ট্রি-র ন্যূনতম সম আয়ত্ত লেভেল বের করার প্রোগ্রাম

  2. C++-এ বাইনারি ট্রির মিনিমাম ডেপথ (Minimum Depth of Binary Tree)

  3. C++-এ দুটি বাইনারি অ্যারেয়ের XOR অন্য একটি অ্যারের সমান করার জন্য ন্যূনতম ফ্লিপ

  4. C++-এ অ্যারেতে ন্যূনতম সংখ্যা যোগ করে যোগফল জোড় করার পদ্ধতি