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

C++ में की के साथ पर्मुटेशन पर क्वेरी


मान लीजिए हमारे पास 1 और m के बीच के पॉजिटिव इंटीजर्स का एक ऐरे queries है, हमें सभी क्वेरी को प्रोसेस करना है, queries[i] (i=0 से n तक, n queries का आकार - 1 है) निम्न नियमों के अनुसार:

  • शुरुआत में, हमारे पास पर्मुटेशन P=[1,2,3,...,m] है।

  • वर्तमान i के लिए, पर्मुटेशन P में queries[i] की स्थिति ढूंढें (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,3,2,4,5] हो।

  • इंडेक्स 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 बढ़ाते हुए, करें -

    • i + 1 को v के अंत में डालें

  • q के प्रत्येक मान x के लिए, करें

    • pos := -1

    • एक ऐरे temp परिभाषित करें

    • i := 0 से शुरू करें, जब i < v का आकार, i बढ़ाते हुए, करें -

      • यदि v[i], x के समान है, तो -

        • pos := i

        • लूप से बाहर आएं

    • temp के शुरुआत में v[pos] डालें

    • i := 0 से शुरू करें, जब i < v का आकार, i बढ़ाते हुए, करें -

      • यदि i, pos के समान है, तो -

        • बाकी भाग को अनदेखा करें, अगले इटरेशन पर जाएं

      • v[i] को temp के अंत में डालें

    • v := temp

    • pos को ret के अंत में डालें

  • ret लौटाएं

उदाहरण

बेहतर समझ के लिए निम्न कार्यान्वयन देखें:

#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++ में उदाहरण के साथ एक्सप्रेशन ट्री C++ में उदाहरण के साथ एक्सप्रेशन ट्री

    एक एक्सप्रेशन ट्री एक विशेष प्रकार का बाइनरी ट्री है जिसमें ट्री का प्रत्येक नोड या तो एक ऑपरेटर या ऑपरेंड से बना होता है। लीफ नोड्स ट्री के एक ऑपरेंड को दर्शाते हैं। नॉन-लीफ नोड्स ट्री के एक ऑपरेटर को दर्शाते हैं। उदाहरण: इनफिक्स एक्सप्रेशन प्राप्त करने के लिए जिसे आसानी से हल किया जा सकता है, हम

  1. C++ में सरणी में कुंजी K की उपस्थिति की संभावना C++ में सरणी में कुंजी K की उपस्थिति की संभावना

    n आकार की एक सरणी दी गई है और कार्य दिए गए तत्व k की संभावना ढूंढना है यदि यह सरणी में उपलब्ध है। पूरी सरणी को n तक पार करें जो सरणी में तत्वों की संख्या के बराबर है और दिए गए तत्व या कुंजी k को खोजें। यदि तत्व सरणी में मौजूद है तो उसकी संभावना की गणना करें अन्यथा 0 प्रिंट करें। इनपुट arr[] = { 1

  1. C++ में 3n स्लाइस वाली पिज्जा C++ में 3n स्लाइस वाली पिज्जा

    समस्या विवरण मान लीजिए 3n स्लाइस वाली एक पिज्जा है जिसके स्लाइस विभिन्न आकार के हैं। मैं और मेरे दो दोस्त पिज्जा के स्लाइस निम्नानुसार लेंगे: मैं कोई भी पिज्जा स्लाइस चुनूंगा। मेरा दोस्त अमल मेरे चुने हुए स्लाइस के एंटी-क्लॉकवाइज दिशा में अगला स्लाइस लेगा। मेरा दोस्त बिमल मेरे चुने हुए स्लाइस के क