C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で昇順でカードを公開する


カードのデッキがあるとします。すべてのカードには1つの固有の番号があります。デッキは好きな順番で注文できます。したがって、最初は、すべてのカードが1つのデッキで裏向き(公開されていない)で始まります。ここで、すべてのカードが表示されるまで、次の手順を複数回実行します-

  • カードのデッキがあるとします。すべてのカードには1つの固有の番号があります。デッキは好きな順番で注文できます。したがって、最初は、すべてのカードが1つのデッキで裏向き(公開されていない)で始まります。ここで、すべてのカードが表示されるまで、次の手順を複数回実行します-

  • デッキにまだカードがある場合は、デッキの次の一番上のカードをデッキの一番下に置きます。

  • まだ見えないカードがある場合は、手順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

  • 0からn–1の範囲のiの場合

    • 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]

  1. C++プログラムで増加するサブシーケンスの最大積

    この問題では、サイズnの配列arr[]が与えられます。私たちの仕事は、増加する部分列の最大積を見つけることです。 問題の説明 −配列の要素から可能な任意のサイズのサブシーケンスを増やすことの最大積を見つける必要があります。 問題を理解するために例を見てみましょう 入力 arr[] = {5, 4, 6, 8, 7, 9} 出力 2160 説明 All Increasing subsequence: {5,6,8,9}. Prod = 2160 {5,6,7,9}. Prod = 1890 Here, we have considered only max size subsequence

  2. C++での二分木垂直順序走査

    二分木があるとすると、そのノードの値の垂直方向の走査を見つける必要があります。 2つのノードが同じ行と列にある場合、順序は左から右になります。 したがって、入力が次のような場合、 その場合、出力は[[9]、[3,15]、[20]、[7]]になります。 これを解決するには、次の手順に従います- 1つのマップを定義するm 関数solve()を定義します。これはノードを取り、xは0で初期化します ノードがnullの場合、- 戻る 解決(ノードの左側、x-1) 解決(ノードの右側、x + 1) m [x]の最後にノードの値を挿入します メ