मान लीजिए कि हमारे पास 1 और m के बीच सकारात्मक पूर्णांकों की एक सरणी क्वेरी है, हमें सभी प्रश्नों, प्रश्नों को संसाधित करना है [i] (i =0 से n तक, n प्रश्नों का आकार है -1) निम्नलिखित नियमों के अनुसार -पी>
-
शुरुआत में, हमारे पास क्रमचय P=[1,2,3,...,m] है।
-
वर्तमान i के लिए, क्रमचय P (0 से अनुक्रमण) में प्रश्नों की स्थिति [i] ज्ञात करें और फिर इसे क्रमचय P की शुरुआत में स्थानांतरित करें।
हमें दिए गए प्रश्नों के परिणाम वाली एक सरणी ढूंढनी है।
इसलिए, यदि इनपुट प्रश्नों की तरह है =[3,1,2,1], एम =5, तो आउटपुट [2,1,2,1] होगा, ऐसा इसलिए है क्योंकि प्रश्नों को निम्नानुसार संसाधित किया जाता है -पी>
-
अनुक्रमणिका i =0 के लिए:क्वेरीज़ [i] =3, P =[1,2,3,4,5], P में 3 की स्थिति 2 है, फिर 3 को P की शुरुआत में ले जाएँ जिसके परिणामस्वरूप P=[3, 1,2,4,5].
-
अनुक्रमणिका के लिए i =1:क्वेरीज़[i]=1, P=[3,1,2,4,5], P में 1 की स्थिति 1 है, फिर 1 को P की शुरुआत में ले जाएँ जिसके परिणामस्वरूप P=[1, 3,2,4,5].
-
अनुक्रमणिका i =2 के लिए:क्वेरीज़[i]=2, P=[1,3,2,4,5], P में 2 की स्थिति 2 है, फिर 2 को P की शुरुआत में ले जाएं जिसके परिणामस्वरूप P=[2, 1,3,4,5].
-
अनुक्रमणिका के लिए i =3:क्वेरीज़[i]=1, P=[2,1,3,4,5], P में 1 की स्थिति 1 है, फिर 1 को P की शुरुआत में ले जाएँ जिसके परिणामस्वरूप P=[1, 2,3,4,5].
-
अंत में, परिणाम वाली सरणी [2,1,2,1] है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक सरणी रिट परिभाषित करें
-
सरणी को परिभाषित करें v
-
इनिशियलाइज़ i :=0 के लिए, जब i - m, अपडेट करें (i को 1 से बढ़ाएँ), करें -
-
v के अंत में i + 1 डालें
-
-
q में प्रत्येक मान x के लिए, करें
-
स्थिति :=-1
-
एक सरणी अस्थायी परिभाषित करें
-
इनिशियलाइज़ i:=0 के लिए, जब i
-
अगर v[i] x के समान है, तो -
-
स्थिति :=मैं
-
लूप से बाहर आएं
-
-
-
सूचकांक v[pos]
. पर अस्थायी में अस्थायी का पहला तत्व डालें -
इनिशियलाइज़ i:=0 के लिए, जब i
-
अगर मैं पॉज़ के समान हूं, तो -
-
निम्नलिखित भाग पर ध्यान न दें, अगले पुनरावृत्ति पर जाएं
-
-
अस्थायी के अंत में v[i] डालें
-
-
वी:=अस्थायी
-
रिट के अंत में पोज़ डालें
-
-
वापसी रिट
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#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, ]