मान लीजिए हमारे पास कार्ड्स का एक डेक है; प्रत्येक कार्ड का एक अद्वितीय नंबर है। हम डेक को किसी भी क्रम में व्यवस्थित कर सकते हैं। प्रारंभ में, सभी कार्ड्स फेस डाउन (अनप्रकट) एक डेक में शुरू होते हैं। अब, हम निम्न चरणों को कई बार करते हैं, जब तक सभी कार्ड प्रकट न हो जाएं:
डेक के शीर्ष कार्ड को प्रकट करें (यदि कोई हो)।
यदि डेक में अभी भी कार्ड हैं, तो अगले शीर्ष कार्ड को डेक के नीचे रखें।
यदि अभी भी अनदेखे कार्ड हैं, तो चरण 1 पर वापस जाएं। अन्यथा, रुकें।
हमें डेक का एक क्रम लौटाना है जो कार्ड्स को बढ़ते क्रम में प्रकट करे। उत्तर में पहली प्रविष्टि को डेक का शीर्ष माना जाता है।
उदाहरण के लिए, यदि इनपुट [17,13,11,2,3,5,7] है, तो आउटपुट [2,13,3,11,5,17,7] होगा।
समाधान दृष्टिकोण
पहले डेक को सॉर्ट करें, n := डेक का आकार
एक क्यू q और आकार n का ans ऐरे बनाएं
0 से n-1 तक सूचकांकों को q में डालें
i को 0 से n-1 तक: x = q.front() पॉप करें, ans[x] = deck[i], फिर अगला फ्रंट पॉप करके पीछे डालें
ans लौटाएं
C++ कार्यान्वयन
#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> deckRevealedIncreasing(vector<int>& deck) {
sort(deck.begin(), deck.end());
int n = deck.size();
queue<int> q;
vector<int> ans(n);
for(int i = 0; i < n; i++) q.push(i);
int x;
for(int i = 0; i < n; i++){
x = q.front(); q.pop();
ans[x] = deck[i];
x = q.front(); q.pop();
q.push(x);
}
return ans;
}
};
int main(){
vector<int> v1 = {17,13,11,2,3,5,7};
Solution ob;
print_vector(ob.deckRevealedIncreasing(v1));
return 0;
}
इनपुट
[17,13,11,2,3,5,7]
आउटपुट
[2,13,3,11,5,17,7]