ধরুন আমাদের পূর্ণসংখ্যার একটি সারি আছে, আমাদের সেই সারিতে প্রথম অনন্য পূর্ণসংখ্যা পুনরুদ্ধার করতে হবে। আমাদের ফার্স্টইউনিক নামক ক্লাসটি বাস্তবায়ন করতে হবে:এটি সারিতে থাকা সংখ্যা দ্বারা শুরু হবে। একটি ফাংশন showFirstUnique() সংজ্ঞায়িত করুন, এটি সারির প্রথম অনন্য পূর্ণসংখ্যার মান প্রদান করবে এবং যদি এমন কোন পূর্ণসংখ্যা না থাকে তবে -1 প্রদান করবে। আরেকটি পদ্ধতি হল যোগ(মান) এটি সারিতে মান সন্নিবেশ করবে।
সুতরাং, যদি ইনপুট মত হয়
-
[2,3,4] দিয়ে শুরু করুন তারপর ফাংশনগুলিকে নিম্নরূপ কল করুন −
-
showFirstUnique()
-
যোগ করুন(5)
-
showFirstUnique()
-
যোগ করুন(2)
-
showFirstUnique()
-
যোগ করুন(3)
-
showFirstUnique(),
তাহলে আউটপুট হবে যথাক্রমে 2, 2, 3, -1।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি সারি q
সংজ্ঞায়িত করুন -
একটি মানচিত্র সংজ্ঞায়িত করুন cnt
-
ইনিশিয়ালাইজার অ্যারে নিয়ে যাবে
-
প্রতিটি উপাদানের জন্য i সংখ্যায়
-
(cnt[i] 1 দ্বারা বাড়ান)
-
-
প্রতিটি উপাদানের জন্য i সংখ্যায়
-
যদি cnt[i] 1 এর মত হয়, তাহলে −
-
q
-এ ঢোকান
-
-
-
-
একটি ফাংশন showFirstUnique()
সংজ্ঞায়িত করুন -
যখন (q খালি নয় এবং cnt[q এর প্রথম উপাদান]> 1), করবেন −
-
q
থেকে উপাদান মুছুন
-
-
রিটার্ন (যদি q খালি হয়, তাহলে -1, অন্যথায় q এর প্রথম উপাদান)
-
একটি ফাংশন সংজ্ঞায়িত করুন (), এটি মান নেবে,
-
(cnt[মান] 1 দ্বারা বৃদ্ধি করুন)
-
যদি cnt[মান] 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