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

अधिकतम आवृत्ति स्टैक C++ में

मान लीजिए हम FreqStack नामक एक स्टैक लागू करना चाहते हैं। हमारे FreqStack में दो फ़ंक्शन हैं:

  • push(x), यह स्टैक पर एक पूर्णांक x डालता है।

  • pop(), यह स्टैक में सबसे अधिक बार आने वाले तत्व को हटाता है और लौटाता है। यदि एक से अधिक तत्वों की समान आवृत्ति है, तो स्टैक के शीर्ष के सबसे करीब वाले तत्व को हटाया और लौटाया जाता है।

उदाहरण के लिए, यदि हम 7, 9, 7, 9, 6, 7 जैसे तत्वों को पुश करते हैं, फिर चार बार पॉप ऑपरेशन करते हैं, तो आउटपुट क्रमशः 7, 9, 7, 6 होगा।

हल करने का दृष्टिकोण

हम दो हैश मैप और एक अधिकतम आवृत्ति ट्रैकर का उपयोग करते हैं:

  • cnt[x] = तत्व x की आवृत्ति

  • sts[f] = आवृत्ति f वाले तत्वों का स्टैक (सबसे हालिया शीर्ष पर)

  • maxFreq = वर्तमान अधिकतम आवृत्ति

  • push: cnt अपडेट करें, maxFreq अपडेट करें, sts[cnt[x]] में डालें

  • pop: sts[maxFreq] से शीर्ष तत्व लें, cnt घटाएं, maxFreq अपडेट करें

उदाहरण

#include <bits/stdc++.h> 
using namespace std; 

class FreqStack { 
public: 
    unordered_map <int ,int > cnt; 
    unordered_map <int, stack <int> > sts; 
    int maxFreq = 0; 
    
    FreqStack() { 
        maxFreq = 0; 
        cnt.clear(); 
        sts.clear(); 
    } 
    
    void push(int x) { 
        cnt[x]++; 
        maxFreq = max(maxFreq, cnt[x]); 
        sts[cnt[x]].push(x); 
    } 
    
    int pop() { 
        int maxKey = maxFreq; 
        int x = sts[maxKey].top(); 
        sts[maxKey].pop(); 
        if(sts[maxKey].size() == 0){ 
            sts.erase(maxKey); 
            maxFreq--; 
        } 
        cnt[x]--; 
        return x; 
    } 
}; 

int main(){ 
    FreqStack ob; 
    ob.push(7); 
    ob.push(9); 
    ob.push(7); 
    ob.push(9); 
    ob.push(6); 
    ob.push(7); 
    cout << (ob.pop()) << endl; 
    cout << (ob.pop()) << endl; 
    cout << (ob.pop()) << endl; 
    cout << (ob.pop()) << endl; 
    return 0;
}

इनपुट

push 7, 9, 7, 9, 6, 7 फिर pop() चार बार कॉल करें

आउटपुट

7 9 7 6
  1. C++ STL में स्टैक (3.5) C++ STL में स्टैक (3.5)

    C++ STL में, स्टैक का उपयोग एक कंटेनर के रूप में किया जाता है जिसे LIFO संरचना के रूप में कार्यान्वित किया जाता है। LIFO का अर्थ है लास्ट इन फर्स्ट आउट। स्टैक को किताबों के ढेर के रूप में देखा जा सकता है जिसमें किताबें एक के ऊपर एक व्यवस्थित होती हैं और अंत में डाली गई किताब सबसे पहले हटाई जाएगी इसल

  1. - C++ में स्टैक अनवाइंडिंग (Stack Unwinding)

    यहां हम देखेंगे कि स्टैक अनवाइंडिंग का क्या अर्थ है। जब हम कुछ फंक्शन कॉल करते हैं, तो यह एड्रेस को कॉल स्टैक में संग्रहीत करता है, और फंक्शन से वापस आने के बाद, उस एड्रेस को पॉप आउट करता है जहां इसे छोड़ा गया था। स्टैक अनवाइंडिंग एक प्रक्रिया है जहां रनटाइम पर फंक्शन कॉल स्टैक एंट्री को हटा दिया

  1. - C# में Stack.Push() मेथड

    विवरण C# में Stack.Push() मेथड स्टैक के शीर्ष पर एक ऑब्जेक्ट डालता है। यह System.Collections नेमस्पेस में नॉन-जेनेरिक Stack और System.Collections.Generic में जेनेरिक Stack<T> दोनों के लिए उपलब्ध है। सिंटैक्स public virtual void Push (object obj); पैरामीटर obj वह ऑब्जेक्ट है जिसे स्टैक पर पुश