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

C++ में आकार k के उप-सरणी का अधिकतम XOR मान ज्ञात कीजिए

इस समस्या में, हमें n तत्वों और aninteger k से मिलकर एक सरणी arr[] दी गई है। हमारा कार्य k आकार के उप-सरणी का अधिकतम XOR मान ज्ञात करना है।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट

arr[] = {3, 1, 6, 2 ,7, 9} k = 3

आउटपुट

12

स्पष्टीकरण

सभी उपसरणी और आकार k के सभी तत्वों का xor,

{3, 1, 6} = 4
{1, 6, 2} = 5
{6, 2, 7} = 3
{2, 7, 9} = 12

समाधान दृष्टिकोण

समस्या का एक सरल समाधान दो छोरों का उपयोग करना है। एक सरणी के ऊपर पुनरावृति करने के लिए और दूसरा उपसरणी के सभी तत्वों के XOR को खोजने के लिए। और फिर अधिकतम लौटाएं।

यह समाधान ठीक है लेकिन समस्या को हल करने के लिए एक बेहतर तरीका बनाया जा सकता है। हमें आकार k के उप-सरणी से शुरू करके योग को खोजने की आवश्यकता है

अनुक्रमणिका 0. और फिर सरणी को पुनरावृत्त करना और XOR में एक नया तत्व जोड़ना और पहले वाले को हटाना। सूत्र x^a^x =a का उपयोग करके हटाना संभव है।

इसलिए, प्रत्येक इंटरैक्शन के लिए हम पहले प्रदर्शन करेंगे, XOR ^ arr[i - k], जो पिछले इंडेक्स + 1 से वर्तमान इंडेक्स - 1 तक सबएरे का मान देगा।

फिर हम वर्तमान एक्सओआर प्राप्त करने के लिए एआर [i] के साथ सबएरे के एक्सओआर का प्रदर्शन करेंगे। हम सभी एक्सओआर में से अधिकतम मूल्य ढूंढेंगे और वापस कर देंगे।

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

उदाहरण

#include<iostream>
using namespace std;
int findMaxSubArrayXOR(int arr[] , int n , int k) {
   int currentXORVal = 0 ;
   for (int i = 0 ; i < k ; i++)
   currentXORVal = currentXORVal ^ arr[i];
   int maxXor = currentXORVal;
   for (int i = k ; i < n; i++) {
      currentXORVal = currentXORVal ^ arr[i-k];
      currentXORVal = currentXORVal ^ arr[i];
      maxXor = max(maxXor, currentXORVal);
   }
   return maxXor;
}
int main() {
   int arr[] = {3, 1, 6, 2, 7, 9};
   int n = sizeof(arr)/sizeof(arr[0]);
   int k = 3;
   cout<<"The maximum XOR of subarray of size "<<k<<" is "<<findMaxSubArrayXOR(arr, n, k);
   return 0;
}

आउटपुट

The maximum XOR of subarray of size 3 is 12

  1. अधिकतम आकार 2 का न्यूनतम विभाजन और C++ में दिए गए मान द्वारा सीमित योग

    समस्या कथन सकारात्मक संख्याओं की एक सरणी गिरफ्तारी [] को देखते हुए, सरणी में सेटों की न्यूनतम संख्या ज्ञात करें जो निम्नलिखित संपत्ति को संतुष्ट करते हैं, एक समुच्चय में अधिकतम दो अवयव हो सकते हैं। दो तत्वों को सन्निहित होने की आवश्यकता नहीं है। सेट के तत्वों का योग दी गई कुंजी से कम या उसके बराबर

  1. C++ में दिए गए मान के निकटतम तत्वों को खोजें

    विचार करें कि हमारे पास कुछ तत्वों के साथ एक सरणी ए है। हमारे पास दो अन्य मान X और k हैं। हमारा कार्य सरणी A से X के निकटतम तत्वों की k संख्या ज्ञात करना है। यदि तत्व X सरणी में मौजूद है, तो यह आउटपुट में नहीं दिखाया जाएगा। अगर ए =[12, 16, 22, 30, 35, 39, 42, 45, 48, 50, 53, 55, 56] और एक्स =35, के

  1. C++ में किसी सरणी में सबसे छोटे मान की आवृत्ति ज्ञात कीजिए

    यहां हम देखेंगे कि किसी सरणी में सबसे छोटे तत्व की आवृत्ति कैसे ज्ञात करें। मान लीजिए कि सरणी तत्व [5, 3, 6, 9, 3, 7, 5, 8, 3, 12, 3, 10] हैं, यहाँ सबसे छोटा तत्व 3 है, और इस तत्व की आवृत्ति 4 है। तो आउटपुट 4 है । इसे हल करने के लिए हमें सूची का सबसे छोटा तत्व मिलेगा, फिर हम पहली संख्याओं की घटनाओं