この記事では主にJavaScriptアルゴリズムの配列反転について紹介しており、一定の参考価値のある内容を中心に詳しく紹介していますので、必要な方は参考にしてください。
1. 配列の反転
1.1 leecode トピック - 回転配列
配列を指定して、配列の要素を k 位置だけ右に回転します。ここで、k は非負の数です。
例:
入力: nums = [1,2,3,4,5,6,7]、k = 3
出力: [5,6,7,1,2,3,4]
説明:
右に 1 ステップ: [7 , 1,2,3,4,5,6]
右に 2 歩: [6,7,1,2,3,4,5]
右に 3 歩: [5,6,7,1,2 ,3, 4]
1.2 分析トピック
- 配列要素は順序どおりに、つまり回転位置 k で回転されます。これは、各要素が k ビットだけ後方に移動し、長さ nk~n-1 の要素が前に移動することを意味します。
- k は非負の整数であるため、左への回転はありません。
1.3 問題解決のアイデア
追加の配列を使用しないことを前提として、配列の長さを length とすると、次のように考えることができます。
- K ビットを回転する必要があります。つまり、配列の最後の k ビットが配列の先頭に移動されます。つまり、配列を反転すると、2 つの配列 [0,k-1]、 [k,lenth-1]、これは回転後の対応する配列ですが、2 つの配列内の要素の順序が逆になります。
- 次に、[0, k-1]、[k, lenth-1]、これら 2 つの配列を順番に反転します。結果の配列が答えになります。
1.4 コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
出力: [5,6,7,1,2,3,4]
1.5 複雑さの分析
- 時間計算量:時間計算量: O(n)、nn は配列の長さです。各要素は 2 回反転され、合計 n 個の要素が反転されるため、合計の時間計算量は O(2n)=O(n) になります。
- 空間複雑度: O(1)。複数の変数を保存するには、一定のスペースのみが必要です。
1.6 その他の解決策
アイデア:
- k ビットが回転されるため、位置 [length-1-k, length-1] の要素は [0, k-1] になります。
- 位置 [0, length-1-k] の要素は [length-1-k, length-1] になります。
- したがって、元の配列を [0,k-1]、[length-1-k,length-1] に分割し、それを [length-1-k,length-1]+[0] に従って分割するだけで済みます。 ,k -1] 配列にアセンブルする
コード:
1 2 3 4 5 6 7 8 |
|
上記のコードでは、行をコメントにしました。これは、新しい Set メソッドを使用して 2 つの配列をマージしたくなるためです。新しい Set メソッドは 2 つの配列について話すため、このメソッドは使用しないでください。配列 マージと重複排除の後、元の配列に同じ要素が出現した場合、新しいセットがユーザーに教訓を与えます。
要約する
アルゴリズムのロジックについては人によって考え方が異なりますが、それらはすべて同じ目標につながり、答えは同じです。前提として、明確な問題に依存し、注意深く分析し、検証する際にはさまざまな状況を考慮する必要があります。 。
ここまでJavaScriptアルゴリズムの配列反転について紹介してきましたが、皆様のお役に立てれば幸いです。