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

C++ में दिए गए आकारों के उप-सरणी में अद्वितीय पूर्णांकों की अधिकतम संख्या


इस समस्या में, हमें आकार n और एक संख्या M की एक सरणी दी गई है। हमारा कार्य एक प्रोग्राम बनाना है जो उप-में अद्वितीय पूर्णांकों की अधिकतम संख्या ज्ञात करेगा। दिए गए आकार की सरणी।

यहां, हमें आकार M की उप-सरणी ढूंढनी होगी जिसमें अद्वितीय तत्वों की अधिकतम संख्या हो।

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

इनपुट - सरणी ={4, 1, 2, 1 , 4, 3}। एम =4

आउटपुट -4

स्पष्टीकरण -

All possible combinations of sub-arrays of size 4.
{4, 1, 2, 1} = 3 unique elements
{1, 2, 1, 4} = 3 unique elements
{2, 1, 4, 3} = 4 unique elements

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

स्लाइडिंग विंडो तकनीक का उपयोग करना एक बेहतर समाधान होगा। जिसमें हम आकार m की एक विंडो बनाते हैं और फिर वर्तमान विंडो के लिए अद्वितीय तत्वों को संग्रहीत करने के लिए हैश तालिका का उपयोग करते हैं।

हम निम्न तरीके से विंडो बनाएंगे -

  • M आकार की एक विंडो बनाएं और तत्वों को हैश मैप में स्टोर करें।

  • फिर एलिमेंट के लिए विंडो में (M+1) स्थिति पर जाएँ और पिछली विंडो के एलिमेंट को हटा दें।

आइए समाधान को बेहतर ढंग से समझने के लिए इस समाधान को हमारे उदाहरण से देखें -

ऐरे ={4, 1, 2, 1, 4, 3}

खिड़की का आकार, एम =4.

विंडो हैश मैप अद्वितीय तत्वों की संख्या तत्व जोड़ा गया तत्व हटाया गया
{4,1,2,1} 4,1,2 3 - -
{1,2,1,4} 1,2,4 3 4 4
{2,1,4,3} 2,1,4,3 4 3 1

यह समाधान दिखाता है कि विंडो और हैश मैप कैसे बनता है और अद्वितीय तत्वों की संख्या की गणना कैसे की जाती है

उदाहरण

किसी दिए गए आकार की उप-सरणी में अद्वितीय पूर्णांकों की अधिकतम संख्या ज्ञात करने के लिए प्रोग्राम -

#include<bits/stdc++.h>
using namespace std;
int maxUniqueElement(int a[],int N,int M){
   map<int,int> hashMap;
   int uniqueCountWindow=0;
   int uniqueCount=0;
   for(int i=0;i<M;i++) {
      if(hashMap.find(a[i])==hashMap.end()) {
         hashMap.insert(make_pair(a[i],1));
         uniqueCountWindow++;
      }
      else
         hashMap[a[i]]++;
      }
      uniqueCount = uniqueCountWindow;
      for(int i=M;i<N;i++) {
         if(hashMap[a[i-M]]==1) {
            hashMap.erase(a[i-M]);
            uniqueCountWindow--;
         }
         else
            hashMap[a[i-M]]--;
            if(hashMap.find(a[i])==hashMap.end()){
               hashMap.insert(make_pair(a[i],1));
               uniqueCountWindow++;
            }
            else
               hashMap[a[i]]++;
               uniqueCount=max(uniqueCount,uniqueCountWindow);
         }
      return uniqueCount;
}
int main(){
   int arr[] = {4, 1 ,2, 1, 4, 3};
   int M=4;
   int N=sizeof(arr)/sizeof(arr[0]);
   cout<<"The maximum number of unique elements in sub-array of size "<<M<<" is "<<maxUniqueElement(arr,N,M)<<endl;
}

आउटपुट

The maximum number of unique elements in sub-array of size 4 is 4

  1. अधिकतम अभाज्य संख्या जिसका योग C++ में दिए गए N के बराबर है

    इस समस्या में, हमें एक संख्या n दी गई है। हमारा कार्य उन अभाज्य संख्याओं की अधिकतम संख्या ज्ञात करना है जिनका योग दिए गए N के बराबर है। यहां, हम अभाज्य संख्याओं की वह अधिकतम संख्या पाएंगे जो जोड़ने पर संख्या के बराबर होगी। अभाज्य संख्याएँ वे संख्याएँ होती हैं जिन्हें स्वयं या एक से विभाजित किया जा

  1. C++ में दिए गए उत्पाद के साथ N पूर्णांकों की अधिकतम GCD

    मान लीजिए कि हम दो पूर्णांक N और P हैं। P, N अज्ञात पूर्णांकों का गुणनफल है। हमें उन पूर्णांकों का अधिकतम संभव GCD ज्ञात करना है। मान लीजिए एन =3, और पी =24, तो अलग-अलग समूह होंगे जैसे {1, 1, 24}, {1, 2, 12}, {1, 3, 8}, {1, 4, 6}, {2 , 2, 6}, {2, 3, 4}। जीसीडी हैं:1, 1, 1, 1, 2, 1. तो उत्तर यहां 2 ह

  1. C++ प्रोग्राम किसी दिए गए नंबर का अद्वितीय गुणनखंडन करने के लिए

    किसी दिए गए पूर्णांक के सभी अद्वितीय गुणनखंड प्राप्त करने के लिए यहां एक सी ++ प्रोग्राम है, जैसे कि एक विभाजन के अतिरिक्त एक पूर्णांक होता है। इस कार्यक्रम में, एक धनात्मक पूर्णांक n दिया गया है, और हम n को धनात्मक पूर्णांकों के योग के रूप में निरूपित करने के लिए सभी संभव अद्वितीय तरीके उत्पन्न करे