কম্পিউটার

C++ এ একটি বাইনারি অ্যারেতে শুধুমাত্র 0 এবং শুধুমাত্র 1 এর সমন্বয়ে গঠিত সাবঅ্যারে গণনা করুন


আমাদেরকে একটি অ্যারে দেওয়া হয়েছে [] যার মধ্যে শুধুমাত্র 0 এবং 1 রয়েছে। লক্ষ্য হল arr[] এর সমস্ত সাবঅ্যারে গণনা করা যাতে প্রতিটি সাবঅ্যারেতে শুধুমাত্র 0 থাকে বা শুধুমাত্র 1 উভয়ই থাকে না। যদি অ্যারেটি [1,0,0] হয়। সাবারেগুলি শুধুমাত্র 0 এর জন্য [0], [0], [0,0] এবং 1 এর শুধুমাত্র [1] এর জন্য হবে।

আসুন উদাহরণ দিয়ে বুঝতে পারি।

ইনপুট − arr[] ={ 0, 0, 1, 1, 1, 0 };

আউটপুট − শুধুমাত্র 0 এর সাথে সাবাররে হল :4টি মাত্র 1 এর সাথে সাবাররে হল :6

ব্যাখ্যা − সুবারায় −

হবে
For all 0’s: [0], [0], [0], [0,0]. Total 4 ( arr[0], arr[1], arr[5], arr[0-1] )
For all 1’s: [1], [1], [1], [1,1], [1,1], [1,1,1]. Total 6 ( arr[2], arr[2], arr[4], arr[2-3], arr[3-4],
arr[2-4] )

ইনপুট − arr[] ={ 1,0,1,0 };

আউটপুট − শুধুমাত্র 0 এর সাথে সাবাররে হল :2টি মাত্র 1 এর সাথে সাবাররে হল :2

ব্যাখ্যা − সুবারায় −

হবে
For all 0’s: [0], [0]. Total 2 ( arr[1], arr[3] )
For all 1’s: [1], [1]. Total 2 ( arr[0], arr[2] )

নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতিটি নিম্নরূপ

শুধুমাত্র 0 এবং 1 এর সাথে আলাদাভাবে সাব্যারে গণনার জন্য আমরা অ্যারেটি দুবার অতিক্রম করব। অ্যারেতে পরপর 0 এবং 1 এর গণনা সংরক্ষণ করতে দুটি কাউন্টার count_0 এবং count_1 নিন। এই ধরনের প্রতিটি গণনার জন্য, সম্ভাব্য সাবঅ্যারে হবে count_0*(count_0+1)/2 এবং অনুরূপভাবে count_1 এর জন্য।

অ্যারের শেষ না হওয়া পর্যন্ত এটিকে total_0 গণনায় যোগ করুন। 1 এর জন্য অনুরূপ প্রক্রিয়া করুন।

  • সংখ্যার একটি অ্যারে অ্যারে নিন।

  • ফাংশন sub_zero_one(int arr[], int size) অ্যারে নেয় এবং শুধুমাত্র 0's সহ সাবয়ারের গণনা এবং শুধুমাত্র 1's সহ সাবয়ারের গণনা প্রদান করে৷

  • সাবয়ারের জন্য temp_0 এবং temp_1 হিসাবে প্রাথমিক গণনা নিন।

  • গণনা_0 এবং গণনা_1 হিসাবে 0 এবং 1 এর সাময়িক ধারাবাহিক গণনা নিন।

  • আমরা i=0 থেকে I এর জন্য লুপ ব্যবহার করে অ্যারে অতিক্রম করব

  • যদি বর্তমান উপাদান 0 বৃদ্ধি গণনা_0 হয়।

  • যদি তা না হয়, temp_one_0=count*(count+1)/2 হিসাবে 0 এর কাউন্ট_0 সংখ্যা সহ সমস্ত সম্ভাব্য সাব্যারে গণনা করুন।

  • এখন পর্যন্ত পাওয়া সমস্ত 0 সহ সাবয়ারের জন্য এটিকে পূর্ববর্তী temp_0 এ যোগ করুন।

  • 1 এর জন্য কাউন্ট_1, temp_one_1 এবং temp_1 হিসাবে ভেরিয়েবল সহ লুপের জন্য অনুরূপ একটি প্রক্রিয়া করুন।

  • উভয় ট্রাভার্সালের শেষে, temp_0 এবং temp_1 এর মধ্যে সমস্ত সাব্যারেগুলির স্বতন্ত্র গণনা থাকবে যেগুলির সমস্ত 0 এবং সমস্ত 1 আছে৷

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
void sub_zero_one(int arr[], int size){
   int count_1 = 0;
   int count_0 = 0;
   int temp_1 = 0;
   int temp_0 = 0;
   for (int i = 0; i < size; i++){
      if (arr[i] == 1){
         count_1++;
      }
      else{
         int temp_one_1 = (count_1) * (count_1 + 1) / 2;
         temp_1 = temp_1 + temp_one_1;
         count_1 = 0;
      }
   }
   for (int i = 0; i < size; i++){
      if (arr[i] == 0)
         { count_0++; }
      else{
         int temp_one_0 = (count_0) * (count_0 + 1) / 2;
         temp_0 = temp_0 + temp_one_0;
         count_0 = 0;
      }
   }
   if (count_1){
      int temp_one_1 = (count_1) * (count_1 + 1) / 2;
      temp_1 = temp_1 + temp_one_1;
   }
   if (count_0){
      int temp_one_0 = (count_0) * (count_0 + 1) / 2;
      temp_0 = temp_0 + temp_one_0;
   }
   cout<<"Subarrays with only 0's are : "<<temp_0;
   cout<<"\nSubarrays with only 1's are : "<<temp_1;
}
int main(){
   int arr[] = { 0, 0, 0, 1, 1, 0, 1};
   int size = sizeof(arr) / sizeof(arr[0]);
   sub_zero_one(arr, size);
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −

উৎপন্ন করবে
Subarrays with only 0's are : 7
Subarrays with only 1's are : 4

  1. C++ এ একটি বাইনারি ট্রি (পুনরাবৃত্ত এবং পুনরাবৃত্তিমূলক) পূর্ণ নোড গণনা করুন

  2. একটি বাইনারি ট্রিতে অর্ধেক নোড গণনা করুন (পুনরাবৃত্ত এবং পুনরাবৃত্তিমূলক) C++ এ

  3. C++ এ একটি অ্যারেতে জোড় এবং বিজোড় উপাদানের সংখ্যা গণনা করুন

  4. C++ এ সাজানো বাইনারি অ্যারেতে 1 এর সংখ্যা গণনা করুন