假设我们有一副扑克牌;每张卡都有一个唯一的号码。我们可以按照所需的任何顺序订购甲板。因此,最初,所有卡在一个卡座中都面朝下(未显露)。现在,我们多次执行以下步骤,直到所有卡片都显示出来-
假设我们有一副扑克牌;每张卡都有一个唯一的号码。我们可以按照所需的任何顺序订购甲板。因此,最初,所有卡在一个卡座中都面朝下(未显露)。现在,我们多次执行以下步骤,直到所有卡片都显示出来-
如果卡座中仍然有卡,则将卡座的下一张顶部卡放在卡座的底部。
如果仍有看不见的卡,请返回步骤1。否则,请停止该过程。
因此,我们必须返回卡片组的排序,以便按递增顺序显示卡片。
现在,答案中的第一个条目被认为是卡片组的顶部。
因此,如果输入类似于[17,13,11,2,3,5,7],那么输出将为[2,13,3,11,5,17,7],假设我们已将其重新排序为[2,13,3,11,5,17,7],现在2在最上面,看到2之后,将13移到最后一个,所以牌组将像[3,11,5,17,7,13 ],然后删除3,然后再次执行该步骤。因此,牌组将为[5,17,7,13,11],然后删除5,然后从上到下移动数组为[7,13,11,17],然后执行相同的操作结构将是[11,17,13],[13.17],[17],然后删除17。
为了解决这个问题,我们将遵循以下步骤-
首先,对牌组进行排序,设置n:=牌组的大小
定义队列q和大小为n的ans数组
将连续的i元素插入q,其中i的范围是0到n – 1
对于i,范围为0至n – 1
x:= q的前元素,然后从队列中删除
ans [x]:=牌组[i]
x:= q的前元素并从队列中删除
将x插入q
返回ans
让我们看下面的实现以更好地理解-
#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& 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;
}
};
main(){
vector<int> v1 = {17,13,11,2,3,5,7};
Solution ob;
print_vector(ob.deckRevealedIncreasing(v1));
}[17,13,11,2,3,5,7]
输出结果
[2,13,3,11,5,17,7]