मान लीजिए कि दो 1D सरणियाँ हैं, हमें एक पुनरावर्तक को लागू करना होगा जो उनके तत्वों को वैकल्पिक रूप से वापस कर देगा। दो तरीके होंगे -
-
अगला () - अगला तत्व प्राप्त करने के लिए
-
hasNext() - यह जांचने के लिए कि अगला तत्व मौजूद है या नहीं।
इसलिए, यदि इनपुट v1 =[1,2] v2 =[3,4,5,6] जैसा है, तो आउटपुट [1,3,2,4,5,6],
होगा।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
जोड़े की एक कतार q परिभाषित करें
-
प्रारंभकर्ता से दो सरणियाँ v1 और v2 ake,
-
अगर v1 का आकार है, तो -
-
q में { 0, 0 } डालें
-
-
अगर v2 का आकार है, तो -
-
q में { 0, 1 } डालें
-
-
एक जोड़ी अस्थायी परिभाषित करें
-
अस्थायी:=q का पहला तत्व
-
q से तत्व हटाएं
-
रिट:=0
-
अगर temp.second 1 के समान है, तो -
-
रिट:=v2[temp.first]
-
(अस्थायी पहले 1 से बढ़ाएं)
-
अगर अस्थायी। पहले
-
q में अस्थायी डालें
-
-
-
अन्यथा
-
रिट:=v1[temp.first]
-
(अस्थायी पहले 1 से बढ़ाएं)
-
अगर अस्थायी। पहले
-
q में अस्थायी डालें
-
-
-
वापसी रिट
-
फ़ंक्शन को परिभाषित करें hasNext()
-
जब q खाली न हो तो सही लौटें
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#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