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

C++ में ब्लैकलिस्ट के साथ रैंडम पिक

मान लीजिए कि हमारे पास बी नामक एक ब्लैकलिस्ट है। यह श्रेणी [0, एन) से अद्वितीय पूर्णांकों को छुपा रहा है, हमें एक समान यादृच्छिक पूर्णांक को श्रेणी [0, एन) से वापस करने के लिए एक फ़ंक्शन परिभाषित करना होगा जो बी में नहीं है। हम कोशिश करेंगे यादृच्छिक() को कम करके इस फ़ंक्शन को और अधिक अनुकूलित करें। फ़ंक्शन कॉल। मान लीजिए इनपुट ऐरे की तरह है

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

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

  • हम एन और एरे वी के साथ इनिशियलाइज़ करेंगे।
  • initalize i :=0 के लिए, जब i करें
  • अगर v[i]
  • एम:=एन - मी का आकार
  • n :=v का आकार
  • इनिशियलाइज़ i :=0 के लिए, जब i करें
  • अगर वी[i] <एम, तो −
    • N को 1 से घटाएं
    • जबकि N, m में है, −
        . करें
      • N को 1 से घटाएं
    • m[v[i]] :=N
  • एक फ़ंक्शन पिक परिभाषित करें ()
  • x :=यादृच्छिक संख्या मॉड एम
  • रिटर्न (यदि x m में मौजूद है, तो m[x], अन्यथा x)
  • आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

    उदाहरण

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       int M;
       map <int,int> m;
       Solution(int N, vector<int>& v) {
          for(int i = 0; i < v.size(); i++){
             if(v[i] < N) m[v[i]] = -1;
          }
          M = N - (int)(m.size());
          int n = v.size();
          for(int i = 0; i < v.size(); i++){
             if(v[i] < M){
                while(m.count(--N));
                m[v[i]] = N;
             }
          }
       }
       int pick() {
          int x = rand() % M;
          return m.count(x)? m[x] : x;
       }
    };
    main(){
       vector<int> v = {2};
       Solution ob(4,v);
       cout << (ob.pick()) << endl;
       cout << (ob.pick()) << endl;
       cout << (ob.pick()) << endl;
    }

    इनपुट

    Give N = 4 and array [2]

    आउटपुट

    1
    1
    0

    1. C++ में रैंडम पॉइंटर के साथ कॉपी लिस्ट

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

    1. सी ++ में उदाहरण के साथ अभिव्यक्ति वृक्ष

      एक्सप्रेशन ट्री एक विशेष प्रकार का बाइनरी ट्री होता है जिसमें ट्री के प्रत्येक नोड में या तो एक ऑपरेटर या ऑपरेंड होता है। लीफ नोड्स पेड़ का एक संचालन . का प्रतिनिधित्व करता है . गैर-पत्ती नोड्स पेड़ का एक ऑपरेटर . का प्रतिनिधित्व करता है । उदाहरण: इंफिक्स एक्सप्रेशन प्राप्त करने के लिए जिस

    1. C++ में 3n स्लाइस के साथ पिज़्ज़ा

      मान लीजिए कि एक पिज्जा है जिसमें अलग-अलग आकार के 3n स्लाइस हैं, मैं और मेरे दो दोस्त पिज्जा के स्लाइस इस प्रकार लेंगे - मैं कोई भी पिज़्ज़ा स्लाइस चुनूंगा। मेरा दोस्त अमल मेरी पसंद की घड़ी की विपरीत दिशा में अगला टुकड़ा उठाएगा। मेरा दोस्त बिमल मेरी पसंद की अगली स्लाइस को दक्षिणावर्त दिशा मे