この質問では、配列要素に対して指定されたクエリを実行します。クエリには、配列要素の左回転、右回転、更新のループが含まれています。
問題を解決するための論理的な部分は、配列の回転です。配列を左に回転する簡単な方法は、各要素を次の要素に置き換え、最後の要素を最初の要素に置き換えることです。
deque データ構造を使用すると、配列を効率的に回転できます。
問題ステートメント - 整数値を含む arr[] 配列が与えられています。さらに、K 個のクエリを含む request[] 配列が与えられます。次のルールに従って、arr[] 配列要素に対して request[] で指定された各クエリを実行する必要があります。
{0} - 配列に対して循環左回転を実行します。
{1) - 配列に対して右循環回転を実行します。
{2, p, q} - インデックス p の要素を q で更新します。
{3, p} - インデックス p の要素を出力します。
説明- 各クエリを実行してみましょう。
{1} -> 配列を右に回転すると、配列は {51, 8, 9, 13, 44, 76, 67, 21}
になります。 {0} -> 更新された配列を左に回転すると、配列は {8, 9, 13, 44, 76, 67, 21, 51} になります。
{2, 4, 50} -> インデックス 4 の要素を 50 に更新すると、配列は {8, 9, 13, 44, 50, 67, 21, 51}
{3, 2} -> 2 番目のインデックスにある要素を出力します。
{2, 2, 223}-> 2 番目のインデックスの要素を 223 に更新すると、配列は {8, 9, 223, 44, 50, 67, 21, 51} になります。
{3, 2} -> 2 番目のインデックスにある要素を出力します。
p>説明
方法1
ステップ 1- 各クエリのループを開始します。
ステップ 2- query[p][0] が 0 に等しい場合は、以下の手順に従ってください。
ステップ 2.1- 配列の最初の要素を使用して「temp」変数を初期化します。
ステップ 2.2- 配列の走査を開始し、各要素を次の要素に置き換えます。
ステップ 2.3- 最後の要素を「temp」値に置き換えます。
ステップ 3- query[p][0] が 1 に等しい場合は、以下の手順に従います。
ステップ 3.1- 配列の最後の要素を「temp」変数に保存します。
ステップ 3.2- 配列の走査を開始し、各要素を前の要素に置き換えます。
ステップ 3.3- 最初の要素を「temp」値で更新します。
ステップ 4-requests[p][0] が 2 の場合、指定されたインデックスにある配列要素を指定された値で更新します。
ステップ 5- request[p][0] が 3 の場合、指定されたインデックスの配列値を出力します。 ###例### リーリー ###出力### リーリー 時間計算量 - O(N*K)、クエリを走査し、配列を回転します。
一定空間を使用するため、空間複雑度 - O(1)。 方法 2
このメソッドでは、両端キューを使用して配列要素を保存します。その後、配列を左に回転するには、キューから前の要素をポップし、キューの最後にプッシュします。同様に、配列を正しい方向に回転できます。 ###アルゴリズム###
ステップ 1- デキューを定義し、すべての配列要素をキューにプッシュします。
ステップ 2- for ループを使用して、各クエリを反復処理します。
ステップ 3- 配列を左に回転するには、キューの先頭から最初の要素を削除し、キューの最後にプッシュします。
ステップ 4- 配列を正しい方向に回転するには、キューの最後から要素を削除し、その要素を先頭にプッシュします。
ステップ 5- 指定されたクエリに基づいて要素を更新するか、要素の値を出力します。 ###例### リーリー ###出力### リーリー 時間計算量 - 配列要素をキューに挿入する場合の O(N K)。
以上が指定されたクエリに従って配列要素を並べ替えて更新しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。