কম্পিউটার

একটি বাইনারি অ্যারেকে বিভাজন করতে ন্যূনতম টগল করে যাতে এটিতে প্রথমে 0s তারপর C++ এ 1s থাকে


সমস্যা বিবৃতি

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

উদাহরণ

যদি arr[] ={1, 0, 0, 1, 1, 1, 0} তাহলে 2টি টগল প্রয়োজন, যেমন প্রথমটি এবং শেষ শূন্য টগল করুন৷

অ্যালগরিদম

  • যদি আমরা প্রশ্নটি পর্যবেক্ষণ করি, তাহলে আমরা দেখতে পাব যে 0 থেকে n-1 পর্যন্ত একটি বিন্দু অবশ্যই থাকবে যেখানে সেই বিন্দু থেকে বাকি সমস্ত উপাদানে সমস্ত 0 এবং ডান থেকে বিন্দুতে সমস্ত 1'স থাকা উচিত
  • যেসব সূচক এই আইন মানে না তাদের সরিয়ে দিতে হবে। ধারণা হল বাম থেকে ডানে সমস্ত 0 সেকেন্ড গণনা করা।

উদাহরণ

#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++ এ বাইনারি ট্রির ন্যূনতম গভীরতা

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

  4. একটি অ্যারেতে ন্যূনতম সংখ্যা যোগ করুন যাতে যোগফল C++ এ সমান হয়?