मान लीजिए कि हमारे पास पूर्णांकों की एक कतार है, हमें उस कतार में पहला अद्वितीय पूर्णांक प्राप्त करने की आवश्यकता है। हमें FirstUnique नामक वर्ग को लागू करना होगा:इसे कतार में संख्याओं द्वारा प्रारंभ किया जाएगा। एक फ़ंक्शन को परिभाषित करें showFirstUnique (), यह कतार के पहले अद्वितीय पूर्णांक का मान लौटाएगा और यदि ऐसा कोई पूर्णांक नहीं है तो -1 लौटाएगा। एक और तरीका है ऐड (वैल्यू) यह क्यू में वैल्यू इन्सर्ट करेगा।
तो, अगर इनपुट पसंद है
-
[2,3,4] के साथ आरंभ करें और फिर कार्यों को निम्नानुसार कॉल करें -
-
शोफर्स्ट यूनिक ()
-
जोड़ें(5)
-
शोफर्स्ट यूनिक ()
-
जोड़ें(2)
-
शोफर्स्ट यूनिक ()
-
जोड़ें(3)
-
शोफर्स्ट यूनिक (),
तो आउटपुट क्रमशः 2, 2, 3, -1 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक कतार को परिभाषित करें q
-
एक मानचित्र को परिभाषित करें
-
प्रारंभकर्ता सरणी लेगा
-
प्रत्येक तत्व के लिए मैं अंकों में
-
(cnt[i] 1 से बढ़ाएं)
-
-
प्रत्येक तत्व के लिए मैं अंकों में
-
अगर cnt[i] 1 के समान है, तो -
-
q में i डालें
-
-
-
-
फ़ंक्शन को परिभाषित करें showFirstUnique()
-
जबकि (नहीं q खाली है और cnt [q का पहला तत्व]> 1), करें −
-
q से तत्व हटाएं
-
-
वापसी (यदि q खाली है, तो -1, अन्यथा q का पहला तत्व)
-
फ़ंक्शन ऐड () को परिभाषित करें, यह मान लेगा,
-
(cnt[value] 1 से बढ़ाएं)
-
अगर cnt[value] 1 के समान है, तो -
-
q में मान डालें
-
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h>
using namespace std;
class FirstUnique {
public:
queue <int> q;
map <int, int> cnt;
FirstUnique(vector<int>& nums) {
for (int i : nums) {
cnt[i]++;
}
for (int i : nums) {
if (cnt[i] == 1) {
q.push(i);
}
}
}
int showFirstUnique() {
while (!q.empty() && cnt[q.front()] > 1) q.pop();
return q.empty() ? -1 : q.front();
}
void add(int value) {
cnt[value]++;
if (cnt[value] == 1)
q.push(value);
}
};
main(){
vector<int> v = {2,3,5};
FirstUnique ob(v);
cout << (ob.showFirstUnique()) << endl;
ob.add(5);
cout << (ob.showFirstUnique()) << endl;
ob.add(2);
cout << (ob.showFirstUnique()) << endl;
ob.add(3);
cout << (ob.showFirstUnique()) << endl;
} इनपुट
{2,3,5}
ob.showFirstUnique();
ob.add(5);
ob.showFirstUnique();
ob.add(2);
ob.showFirstUnique();
ob.add(3);
ob.showFirstUnique(); आउटपुट
2 2 3 -1