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

बिटवाइज़ और C++ का उपयोग करते हुए कम से कम एक गैर-रिक्त उप-सरणी की संख्याएँ

एक समस्या को हल करने के लिए जहां हमें एक सरणी दी जाती है, और हमें सभी संभावित पूर्णांकों को खोजने की आवश्यकता होती है जो बिटवाइज़ हैं और कम से कम एक खाली सबअरे नहीं है, उदाहरण के लिए -

Input : nums[ ] = { 3, 5, 1, 2, 8 }
Output : { 2, 5, 0, 3, 8, 1 }
Explanation:
2 is the bitwise AND of subarray {2},
5 is the bitwise AND of subarray {5},
0 is the bitwise AND of subarray {1, 2}, {2, 8} and {1, 2, 8},
3 is the bitwise AND of subarray {3},
8 is the bitwise AND of subarray {8},
1 is the bitwise AND of subarray {1}, {3, 5} and {3, 5, 1}.

Input : nums[ ] = { 2, 6, 3, 8, 1 }
Output: { 1, 8, 3, 6, 2, 0 }

समाधान खोजने के लिए दृष्टिकोण

एक साधारण दृष्टिकोण जिसे लागू किया जा सकता है,

  • सभी संभावित गैर-रिक्त उप-सरणी खोजें।

  • सरणी से गुजरते समय, बिटवाइज़ और उपसरणी में प्रत्येक तत्व की गणना करें।

  • डुप्लिकेट मानों से बचने के लिए, सभी परिणामों को एक सेट में संग्रहित करें।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int main(){
    int arr[] ={ 2, 6, 3, 8, 1 };
    int n = sizeof(arr) / sizeof(arr[0]);
    // Declaring set to store result of each AND operation.
    unordered_set<int> result;
    int val;
    // nested loops to traverse through all the possible non empty subarrays.
    for (int i = 0; i < n; ++i){
        for (int j = i, val = INT_MAX; j < n; ++j){
            val = val & arr[j];
            // storing result of AND operation
            result.insert(val);
        }
    }
    cout << "All possible numbers are: ";
    // printing all the values of set.
    for (auto i = result.begin(); i != result.end();i++)
        cout << *i << " ";
    return 0;
}

आउटपुट

All possible numbers are: 1 8 3 6 0 2

उपरोक्त कोड की व्याख्या

  • AND संचालन के सभी परिणामों को संग्रहीत करने के लिए सेट घोषित करना।

  • INT_MAX के साथ 'वैल' वेरिएबल को इनिशियलाइज़ करना क्योंकि हमें 1 पर सेट सभी बिट्स के साथ AND ऑपरेशन करने की आवश्यकता है।

  • ith अनुक्रमणिका से सभी संभावित उप-सरणी के माध्यम से जाने के लिए लूप के अंदर।

  • प्रत्येक तत्व की गणना और संचालन एक दूसरे के साथ और स्वयं के साथ और परिणाम सेट में संग्रहीत करना।

  • परिणाम सेट के सभी मानों को प्रिंट करना।

निष्कर्ष

इस ट्यूटोरियल में, हमने इस समस्या को हल करने के लिए एक सरल दृष्टिकोण पर चर्चा की, यानी, हर संभव सबएरे में गणना और संचालन। हमने इस समस्या को हल करने के लिए C++ प्रोग्राम पर भी चर्चा की। इसके अलावा, आप इस कोड को किसी अन्य भाषा जैसे जावा, सी, पायथन, आदि में लिख सकते हैं। हमें उम्मीद है कि आपको यह ट्यूटोरियल मददगार लगेगा।


  1. C++ में डिवाइड और कॉनकर का उपयोग करते हुए अधिकतम योग सबअरे

    मान लीजिए कि हमारे पास सकारात्मक और नकारात्मक मूल्यों वाले डेटा की एक सूची है। हमें सन्निहित उप-सरणी का योग ज्ञात करना है जिसका योग सबसे बड़ा है। मान लीजिए सूची में {-2, -5, 6, -2, -3, 1, 5, -6} है, तो अधिकतम उप-सरणी का योग 7 है। यह {6, -2, -3 का योग है। , 1, 5} हम इस समस्या का समाधान फूट डालो और ज

  1. ऐसी दो संख्याएँ ज्ञात कीजिए जिनका योग और GCD C++ में दिया गया है

    हमारे पास दो संख्याओं a और b का योग और gcd है। हमें a और b दोनों संख्याएँ ज्ञात करनी हैं। यदि यह संभव नहीं है, तो वापसी -1। मान लीजिए कि योग 6 है और gcd 2 है, तो संख्याएँ 4 और 2 हैं। दृष्टिकोण ऐसा है, जैसा कि GCD दिया जाता है, तो ज्ञात होता है कि संख्याएँ इसके गुणज होंगी। अब निम्नलिखित चरण हैं य

  1. C++ में डिवाइड और कॉनकर एल्गोरिथम का उपयोग करते हुए अधिकतम सबअरे योग

    मान लीजिए कि हमारे पास सकारात्मक और नकारात्मक मूल्यों वाले डेटा की एक सूची है। हमें सन्निहित उप-सरणी का योग ज्ञात करना है जिसका योग सबसे बड़ा है। मान लीजिए सूची में {-2, -5, 6, -2, -3, 1, 5, -6} है, तो अधिकतम उप-सरणी का योग 7 है। यह {6, -2, -3 का योग है। , 1, 5} हम इस समस्या को फूट डालो और जीतो पद्