কম্পিউটার

C++ এ কী সহ একটি পারমুটেশন নিয়ে প্রশ্ন


ধরুন আমাদের 1 এবং m-এর মধ্যে ধনাত্মক পূর্ণসংখ্যার একটি অ্যারে কোয়েরি আছে, আমাদের নিম্নলিখিত নিয়ম অনুসারে সমস্ত প্রশ্ন, প্রশ্ন [i] প্রক্রিয়া করতে হবে (i=0 থেকে n, n হল প্রশ্নের আকার - 1) পি>

  • শুরুতে, আমাদের P=[1,2,3,...,m] পারমুটেশন আছে।

  • বর্তমান i-এর জন্য, P-এ প্রশ্নগুলির অবস্থান খুঁজুন (0 থেকে সূচীকরণ) এবং তারপর এটিকে স্থানান্তর P-এর শুরুতে সরান।

প্রদত্ত প্রশ্নের জন্য ফলাফল সম্বলিত একটি অ্যারে খুঁজে বের করতে হবে।

সুতরাং, যদি ইনপুটটি queries =[3,1,2,1], m =5 এর মত হয়, তাহলে আউটপুট হবে [2,1,2,1], এর কারণ হল ক্যোয়ারীগুলি অনুসরণ করে প্রক্রিয়া করা হয় -

  • সূচক i =0:queries[i]=3, P=[1,2,3,4,5], P-এ 3-এর অবস্থান হল 2, তারপর 3-কে P-এর শুরুতে সরান যার ফলে P=[3, 1,2,4,5]।

  • সূচক i =1:queries[i]=1, P=[3,1,2,4,5], P-এ 1-এর অবস্থান হল 1, তারপর 1-কে P-এর শুরুতে সরান যার ফলে P=[1, ৩,২,৪,৫]।

  • সূচক i =2:queries[i]=2, P=[1,3,2,4,5], P-এ 2-এর অবস্থান হল 2, তারপর 2-কে P-এর শুরুতে সরান যার ফলে P=[2, 1,3,4,5]।

  • সূচক i =3:queries[i]=1, P=[2,1,3,4,5], P-এ 1-এর অবস্থান হল 1, তারপর 1-কে P-এর শুরুতে সরান যার ফলে P=[1, 2,3,4,5]।

  • অবশেষে, ফলাফল ধারণকারী অ্যারে হল [2,1,2,1]।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি অ্যারে ret সংজ্ঞায়িত করুন

  • একটি অ্যারে v

    সংজ্ঞায়িত করুন
  • আরম্ভ করার জন্য i :=0, যখন i − m, আপডেট করুন (i 1 দ্বারা বাড়ান), করুন −

    • v

      এর শেষে i + 1 ঢোকান
  • প্রতিটি মানের জন্য x q, করুন

    • অবস্থান :=-1

    • একটি অ্যারের তাপমাত্রা সংজ্ঞায়িত করুন

    • আরম্ভ করার জন্য i :=0, যখন i

      • যদি v[i] x এর মত হয়, তাহলে −

        • pos :=i

        • লুপ থেকে বেরিয়ে আসুন

    • সূচক v[pos>

      -এ temp-এর প্রথম উপাদান প্রবেশ করান
    • আরম্ভ করার জন্য i :=0, যখন i

      • যদি আমি pos এর মতই হয়, তাহলে -

        • নিম্নলিখিত অংশ উপেক্ষা করুন, পরবর্তী পুনরাবৃত্তি এড়িয়ে যান

      • টেম্পের শেষে v[i] ঢোকান

    • v :=temp

    • ret এর শেষে pos সন্নিবেশ করুন

  • রিটার্ন রিটার্ন

উদাহরণ

আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<int> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   vector<int> processQueries(vector<int>& q, int m) {
      vector<int> ret;
      vector<int> v;
      for (int i = 0; i < m; i++)
         v.push_back(i + 1);
      for (int x : q) {
         int pos = -1;
         vector<int> temp;
         for (int i = 0; i < v.size(); i++) {
            if (v[i] == x) {
               pos = i;
               break;
            }
         }
         temp.insert(temp.begin(), v[pos]);
         for (int i = 0; i < v.size(); i++) {
            if (i == pos)
               continue;
            temp.push_back(v[i]);
         }
         v = temp;
         ret.push_back(pos);
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<int> v = {3,1,2,1};
   print_vector(ob.processQueries(v, 5));
}

ইনপুট

{3,1,2,1}, 5

আউটপুট

[2, 1, 2, 1, ]

  1. C++ এ উদাহরণ সহ এক্সপ্রেশন ট্রি

  2. C++-এ অ্যারেতে উপস্থিত একটি কী K-এর সম্ভাবনা

  3. C++ এ 3n স্লাইস সহ পিৎজা

  4. আভিধানিকভাবে C++ এর পরবর্তী স্থানান্তর