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