मान लीजिए कि हमारे पास बी नामक एक ब्लैकलिस्ट है। यह श्रेणी [0, एन) से अद्वितीय पूर्णांकों को छुपा रहा है, हमें एक समान यादृच्छिक पूर्णांक को श्रेणी [0, एन) से वापस करने के लिए एक फ़ंक्शन परिभाषित करना होगा जो बी में नहीं है। हम कोशिश करेंगे यादृच्छिक() को कम करके इस फ़ंक्शन को और अधिक अनुकूलित करें। फ़ंक्शन कॉल। मान लीजिए इनपुट ऐरे की तरह है
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
एक मानचित्र परिभाषित करें
- हम एन और एरे वी के साथ इनिशियलाइज़ करेंगे।
- initalize i :=0 के लिए, जब i
करें - अगर v[i]
- अगर v[i]
- N को 1 से घटाएं
- जबकि N, m में है, −
- . करें
- N को 1 से घटाएं
- m[v[i]] :=N
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#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