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

C++ में अधिकतम फ़्रीक्वेंसी स्टैक

मान लीजिए कि हम फ्रीकस्टैक नामक एक स्टैक को लागू करना चाहते हैं, हमारे फ्रीकस्टैक के दो कार्य हैं -

  • push(x), यह एक पूर्णांक x को स्टैक पर धकेल देगा।

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

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

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक मानचित्र को परिभाषित करें

  • एक नक्शा एसटीएस परिभाषित करें

  • मैक्सफ्रीक:=0

  • फ़ंक्शन पुश () को परिभाषित करें, इसमें x लगेगा,

  • (cnt[x] 1 से बढ़ाएं)

  • maxFreq :=अधिकतम अधिकतम फ़्रीक और cnt[x]

  • एसटीएस में एक्स डालें [सीएनटी [एक्स]]

  • फ़ंक्शन पॉप को परिभाषित करें ()

  • maxKey :=maxFreq

  • x :=sts का शीर्ष तत्व [maxKey]

  • एसटीएस से तत्व हटाएं [मैक्सकी]

  • यदि sts[maxKey] का आकार 0 के समान है, तो -

    • मैक्सकी को एसटीएस से हटाएं

    • (maxFreq को 1 से घटाएं)

  • (cnt[x] 1 से घटाएं)

  • वापसी x

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#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;
   }
};
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;
}

इनपुट

push elements 7, 9, 7, 9, 6, 7, then call pop() four times.

आउटपुट

7
9
7
6

  1. सी ++ एसटीएल में ढेर (3.5)

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

  1. सी ++ में स्टैक अनवाइंडिंग

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

  1. Stack.Push () सी # में विधि

    C# में Stack.Push () विधि का उपयोग स्टैक के शीर्ष पर किसी ऑब्जेक्ट को सम्मिलित करने के लिए किया जाता है। सिंटैक्स वाक्य रचना इस प्रकार है - public virtual void Push (object ob); ऊपर, पैरामीटर ob वह वस्तु है जिसे स्टैक पर धकेलना है। उदाहरण आइए अब एक उदाहरण देखें - using System; using System.Collec