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

C++ में समान संख्या में 0s और 1s के साथ सबसे बड़ा सबअरे

आइए कार्यक्रम को पूरा करने के चरणों को देखें।

  • सरणी प्रारंभ करें।
  • सरणी के सभी शून्यों को -1 बना दें।
  • पिछली अनुक्रमणिकाओं को संग्रहीत करने के लिए एक नक्शा खाली नक्शा रखें।
  • सम को 0 से प्रारंभ करें, अधिकतम लंबाई 0 से और अंत अनुक्रमणिका -1 से प्रारंभ करें।
  • एक लूप लिखें जो n तक पुनरावृत्त हो।
    • योग में वर्तमान तत्व जोड़ें।
    • यदि योग 0 के बराबर है।
      • अधिकतम लंबाई को i + 1 से अपडेट करें।
      • और अनुक्रमणिका को i पर समाप्त करना।
    • यदि योग पिछले योग मानचित्र में मौजूद है और i - पिछले इंडेक्स [योग] अधिकतम लंबाई से अधिक है।
      • अधिकतम लंबाई और समाप्ति अनुक्रमणिका अपडेट करें।
    • अन्यथा पिछले इंडेक्स मैप में योग जोड़ें।
  • शुरुआती इंडेक्स एंडिंगइंडेक्स - मैक्सलेंथ + 1 और एंडिंग इंडेक्स एंडिंगइंडेक्स प्रिंट करें।

उदाहरण

आइए कोड देखें।

#include <bits/stdc++.h>
using namespace std;
void findTheSubArray(int arr[], int n) {
   unordered_map<int, int> previousIndexes;
   int sum = 0, maxLength = 0, endingIndex = -1;
   for (int i = 0; i < n; i++) {
      arr[i] = arr[i] == 0 ? -1 : 1;
   }
   for (int i = 0; i < n; i++) {
      sum += arr[i];
      if (sum == 0) {
         maxLength = i + 1;
         endingIndex = i;
      }
      if (previousIndexes.find(sum) != previousIndexes.end()) {
         if (maxLength < i - previousIndexes[sum]) {
            maxLength = i - previousIndexes[sum];
            endingIndex = i;
         }
      }else {
         previousIndexes[sum] = i;
      }
   }
   cout << endingIndex - maxLength + 1 << " " << endingIndex << endl;
}
int main() {
   int arr[] = { 1, 1, 0, 0, 0, 1, 1, 1, 0 };
   findTheSubArray(arr, 9);
   return 0;
}

आउटपुट

यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्न परिणाम प्राप्त होंगे।

1 8

निष्कर्ष

यदि ट्यूटोरियल में आपके कोई प्रश्न हैं, तो उनका टिप्पणी अनुभाग में उल्लेख करें।


  1. C++ में समान संख्या में 0s, 1s और 2s के साथ सबस्ट्रिंग गिनें

    हमें केवल 0, 1 और 2 वाले स्ट्रिंग स्ट्र दिए गए हैं। लक्ष्य स्ट्र के सभी सबस्ट्रिंग्स को खोजना है जिनमें 0 के 1 और 2 के बराबर संख्याएं हैं। यदि str 12012 है। 0, 1 और 2 के बराबर वाले सबस्ट्रिंग 120, 201 और 012 होंगे। गिनती 3 होगी। आइए उदाहरणों से समझते हैं। इनपुट - str=112200120 आउटपुट −0s, 1s, और

  1. C++ में बिटवाइज़ और ODD नंबर के साथ जोड़े गिनें

    हमें एक पूर्णांक सरणी दी गई है और कार्य जोड़े की कुल संख्या की गणना करना है जो दिए गए सरणी मानों का उपयोग करके बनाई जा सकती हैं जैसे कि जोड़े पर और ऑपरेशन के परिणामस्वरूप एक विषम संख्या होगी। और संचालन के लिए सत्य तालिका नीचे दी गई है A B A^B 0 0 0 1 0 0 0 1 0 1 1 1 इनपुट - int arr[] ={2,

  1. C++ में बिटवाइज़ और इक्वल टू ज़ीरो के साथ ट्रिपल्स

    मान लीजिए कि हमारे पास पूर्णांक A की एक सरणी है। हमें सूचकांकों (i, j, k) के त्रिगुणों की संख्या इस प्रकार ज्ञात करनी है कि - 0 <=i <ए का आकार 0 <=j