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

C++ में समान संख्या में 0 और 1 वाला सबसे बड़ा सबअरे


आइए प्रोग्राम को पूरा करने के चरण देखते हैं।

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

उदाहरण

आइए कोड देखते हैं।

#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++ में 0, 1, 2 की समान संख्या वाले सबस्ट्रिंग की गिनती

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

  1. - C++ में बिटवाइज AND विषम संख्या वाले युग्मों की गणना

    हमें एक पूर्णांक सरणी दी गई है और कार्य दिए गए सरणी मानों का उपयोग करके बनने वाले कुल युग्मों की संख्या गिनना है जैसे कि युग्मों पर AND ऑपरेशन का परिणाम एक विषम संख्या हो। AND ऑपरेशन के लिए सत्य सारणी ABA AND B 000 100 010 111 इनपुट - int arr[]

  1. - बिटवाइज AND शून्य के बराबर वाले ट्रिपलेट C++ में

    मान लीजिए हमारे पास पूर्णांकों की एक सरणी A है। हमें सूचकांकों (i, j, k) के उन ट्रिपलेट्स की संख्या ढूंढनी है जहां 0 <= i, j, k < A का आकार और A[i] AND A[j] AND A[k] == 0, जहां AND बिटवाइज-AND ऑपरेटर दर्शाता है। उदाहरण के लिए, यदि इनपुट [3,1,2] है, तो आउटपुट 12 होगा। हल करने का दृष्टिकोण हम सभी जो