假设我们有一副扑克牌;每张卡都有一个唯一的号码。我们可以按照所需的任何顺序订购甲板。因此,最初,所有卡在一个卡座中都面朝下(未显露)。现在,我们多次执行以下步骤,直到所有卡片都显示出来-
假设我们有一副扑克牌;每张卡都有一个唯一的号码。我们可以按照所需的任何顺序订购甲板。因此,最初,所有卡在一个卡座中都面朝下(未显露)。现在,我们多次执行以下步骤,直到所有卡片都显示出来-
如果卡座中仍然有卡,则将卡座的下一张顶部卡放在卡座的底部。
如果仍有看不见的卡,请返回步骤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]