एक समस्या को हल करने के लिए जहां हमें एक सरणी दी जाती है, और हमें सभी संभावित पूर्णांकों को खोजने की आवश्यकता होती है जो बिटवाइज़ हैं और कम से कम एक खाली सबअरे नहीं है, उदाहरण के लिए -
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++ प्रोग्राम पर भी चर्चा की। इसके अलावा, आप इस कोड को किसी अन्य भाषा जैसे जावा, सी, पायथन, आदि में लिख सकते हैं। हमें उम्मीद है कि आपको यह ट्यूटोरियल मददगार लगेगा।