ধরুন দুটি 1D অ্যারে আছে, আমাদেরকে একটি পুনরাবৃত্তিকারী প্রয়োগ করতে হবে যা তাদের উপাদানগুলিকে পর্যায়ক্রমে ফিরিয়ে দেবে। দুটি পদ্ধতি থাকবে -
-
next() - পরবর্তী উপাদান পেতে
-
hasNext() − পরবর্তী উপাদানটি উপস্থিত আছে কি না তা পরীক্ষা করতে।
সুতরাং, যদি ইনপুট v1 =[1,2] v2 =[3,4,5,6] এর মত হয়, তাহলে আউটপুট হবে [1,3,2,4,5,6],
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
জোড়ার এক সারি q সংজ্ঞায়িত করুন
-
ইনিশিয়ালাইজার থেকে দুটি অ্যারে v1 এবং v2,
-
যদি v1 এর আকার হয়, তাহলে −
-
q
-এ { 0, 0 } ঢোকান
-
-
যদি v2 এর আকার হয়, তাহলে −
-
q
-এ { 0, 1 } ঢোকান
-
-
এক জোড়া তাপমাত্রা সংজ্ঞায়িত করুন
-
temp :=q এর প্রথম উপাদান
-
q
থেকে উপাদান মুছুন -
ret :=0
-
যদি temp.second 1 এর মত হয়, তাহলে −
-
ret :=v2[temp.first]
-
(প্রথম তাপমাত্রা 1 দ্বারা বাড়ান)
-
যদি temp.first
-
q
-এ তাপমাত্রা সন্নিবেশ করান
-
-
-
অন্যথায়
-
ret :=v1[temp.first]
-
(প্রথম তাপমাত্রা 1 দ্বারা বাড়ান)
-
যদি temp.first
-
q
-এ তাপমাত্রা সন্নিবেশ করান
-
-
-
রিটার্ন রিটার্ন
-
hasNext()
একটি ফাংশন সংজ্ঞায়িত করুন -
q খালি না থাকলে true ফেরত দিন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <bits/stdc++.h>
using namespace std;
class ZigzagIterator {
public:
queue <pair<int, int>> q;
vector <int< v1, v2;
ZigzagIterator(vector<int<& v1, vector<int<& v2) {
this->v1 = v1;
this->v2 = v2;
if (v1.size()) {
q.push({ 0, 0 });
}
if (v2.size()) {
q.push({ 0, 1 });
}
}
int next() {
pair<int, int> temp;
temp = q.front();
q.pop();
int ret = 0;
if (temp.second == 1) {
ret = v2[temp.first];
temp.first++;
if (temp.first < v2.size())
q.push(temp);
}
else {
ret = v1[temp.first];
temp.first++;
if (temp.first < v1.size())
q.push(temp);
}
return ret;
}
bool hasNext() {
return !q.empty();
}
};
main(){
vector<int< v1 = {1,3,5,7}, v2 = {2,4,6,8,10,12,17};
ZigzagIterator ob(v1, v2);
cout << (ob.next()) << endl;
cout << (ob.next()) << endl;
cout << (ob.hasNext() ? "True" : "False") << endl;
cout << (ob.next()) << endl;
cout << (ob.next()) << endl;
cout << (ob.next()) << endl;
cout << (ob.hasNext() ? "True" : "False") << endl;
cout << (ob.next()) << endl;
cout << (ob.next()) << endl;
cout << (ob.next()) << endl;
cout << (ob.next()) << endl;
cout << (ob.hasNext() ? "True" : "False") << endl;
cout << (ob.next()) << endl;
cout << (ob.next()) << endl;
cout << (ob.hasNext() ? "True" : "False") << endl;
} ইনপুট
{1,3,5,7},{2,4,6,8,10,12,17} আউটপুট
1 2 True 3 4 5 True 6 7 8 10 True 12 17 False