কম্পিউটার

C++ এ জিগজ্যাগ ইটারেটর


ধরুন দুটি 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

  1. C++ তে পরবর্তী ক্রমবর্ধমান

  2. C++ এ অবৈধ লেনদেন

  3. C++ এ ম্যাট্রিক্সের জিগজ্যাগ (বা তির্যক) ট্রাভার্সাল

  4. C++ এ জিগজ্যাগ ট্রি ট্রাভার্সাল