在C ++中按升序显示卡

假设我们有一副扑克牌;每张卡都有一个唯一的号码。我们可以按照所需的任何顺序订购甲板。因此,最初,所有卡在一个卡座中都面朝下(未显露)。现在,我们多次执行以下步骤,直到所有卡片都显示出来-

  • 假设我们有一副扑克牌;每张卡都有一个唯一的号码。我们可以按照所需的任何顺序订购甲板。因此,最初,所有卡在一个卡座中都面朝下(未显露)。现在,我们多次执行以下步骤,直到所有卡片都显示出来-

  • 如果卡座中仍然有卡,则将卡座的下一张顶部卡放在卡座的底部。

  • 如果仍有看不见的卡,请返回步骤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]