Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी ++ में बाइनरी सरणी में केवल 0 और केवल 1 से मिलकर उप-सरणी की गणना करें

हमें एक सरणी गिरफ्तारी [] दी गई है जिसमें केवल 0 और 1 है। लक्ष्य गिरफ्तारी के सभी उप-सरणी [] को गिनना है जैसे कि प्रत्येक उपसरणी में केवल 0 या केवल 1 दोनों नहीं हैं। यदि सरणी [1,0,0] है। सबअरे केवल 0 के [0], [0], [0,0] और केवल 1 के [1] के लिए होंगे।

आइए उदाहरणों से समझते हैं।

इनपुट - एआर [] ={ 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] )

इनपुट - गिरफ्तार [] ={ 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 की गिनती संग्रहीत करने के लिए दो काउंटर काउंट_0 और काउंट_1 लें। ऐसी प्रत्येक गणना के लिए, संभावित उप-सरणी होगी count_0*(count_0+1)/2 और इसी तरह count_1 के लिए।

सरणी के अंत तक पहुंचने तक इसे कुल_0 गिनती में जोड़ें। 1 के लिए इसी तरह की प्रक्रिया करें।

  • संख्याओं की एक सरणी गिरफ्तारी [] लें।

  • फ़ंक्शन sub_zero_one(int arr[], int size) सरणी लेता है और केवल 0 के साथ उपसरणियों की संख्या और केवल 1 के साथ उपसरणियों की संख्या देता है।

  • उप-सरणी के लिए प्रारंभिक गणनाएं temp_0 और temp_1 के रूप में लें।

  • 0 और 1 की अस्थायी लगातार गणनाओं को count_0 और count_1 के रूप में लें।

  • हम लूप के लिए i=0 से I

  • यदि वर्तमान तत्व 0 वेतन वृद्धि count_0 है।

  • यदि नहीं, तो सभी संभावित उप-सरणी की गणना करें, जिसमें 0 की संख्या के साथ temp_one_0=count*(count+1)/2.

  • अब तक मिले सभी 0 के साथ उप-सरणी के लिए इसे पिछले temp_0 में जोड़ें।

  • गिनती_1, temp_one_1 औरtemp_1 के रूप में चर के साथ 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++ में एक बाइनरी ट्री (पुनरावर्ती और पुनरावर्ती) में पूर्ण नोड्स की गणना करें

    हमें एक बाइनरी ट्री दिया गया है और कार्य एक बाइनरी ट्री में उपलब्ध पूर्ण नोड्स की गणना करने के लिए पुनरावृत्ति और पुनरावर्ती दृष्टिकोण का उपयोग करना है। पूर्ण नोड्स वे नोड हैं जिनके दोनों बच्चे हैं और कोई भी बच्चा शून्य नहीं है। ध्यान दें कि पूर्ण नोड्स में हम ठीक दो बच्चों वाले नोड्स पर विचार करते

  1. C++ में एक बाइनरी ट्री (पुनरावर्ती और पुनरावर्ती) में आधे नोड्स की गणना करें

    हमें एक बाइनरी ट्री दिया गया है और कार्य एक बाइनरी ट्री में उपलब्ध आधे नोड्स की गणना करने के लिए पुनरावृत्ति और पुनरावर्ती दृष्टिकोण का उपयोग करना है। हाफ नोड्स वे नोड होते हैं जिनमें केवल एक बच्चा होता है और दूसरा बच्चा शून्य होता है। ध्यान दें कि आधे नोड्स में हम लीफ नोड्स पर विचार नहीं करते हैं।

  1. सी ++ में क्रमबद्ध बाइनरी सरणी में 1 की गणना करें

    इस ट्यूटोरियल में, हम एक क्रमबद्ध बाइनरी एरे में 1 को खोजने के लिए एक प्रोग्राम पर चर्चा करेंगे। इसके लिए हमें केवल 1 और 0 वाली एक सरणी प्रदान की जाएगी। हमारा कार्य सरणी में मौजूद 1 की संख्या को गिनना है। उदाहरण #include <bits/stdc++.h> using namespace std; //returning the count of 1 int coun