Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में ज़िगज़ैग इटरेटर

मान लीजिए कि दो 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

  1. C++ में अमान्य लेनदेन

    मान लीजिए कि कुछ लेनदेन हैं। लेन-देन संभवतः अमान्य है यदि - राशि $1000 से अधिक है, या; अगर यह एक अलग शहर में एक ही नाम के साथ एक और लेनदेन के 60 मिनट के भीतर (और इसमें शामिल) होता है। यहां प्रत्येक लेन-देन स्ट्रिंग लेनदेन [i] में अल्पविराम से अलग किए गए मान होते हैं जो लेन-देन के नाम, समय (

  1. C++ . में मैट्रिक्स का ज़िगज़ैग (या विकर्ण) ट्रैवर्सल

    इस समस्या में, हमें एक 2D मैट्रिक्स दिया गया है। हमारा काम मैट्रिक के सभी तत्वों को तिरछे क्रम में प्रिंट करना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, 1    2    3 4    5    6 7    8    9 आउटपुट - 1 4    2 7    

  1. C++ . में ज़िगज़ैग ट्री ट्रैवर्सल

    इस समस्या में हमें एक बाइनरी ट्री दिया जाता है। हमारा काम बाइनरी ट्री को ज़िगज़ैग रूप में प्रिंट करना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, उपरोक्त बाइनरी ट्री का ज़िगज़ैग ट्रैवर्सल है 3    5    1    8    7    0    4 इस समस्या