1

サイズ4の配列があり、5つの要素があるとします

1)  0,1,2,3
2)  4,0,1,2 after 1st rotation
3)  3,4,0,1 after 2nd rotation
4)  2,3,4,0 after 3rd rotation 
5)  1,2,3,4 after 4th rotation
6)  0,1,2,3 after 5th rotation 

ご覧のとおり、5回の反復後に数値が繰り返されます。配列の k 番目の要素を効率的に検索する方法はありますか? N回転と言った後??

4

2 に答える 2

2

配列インデックスがゼロベースであると想定します。

N回転後のM要素配列のK番目の値のインデックスを計算するには、次の式を使用する必要があります

(K + N) mod M

したがって、配列が与えられたarr場合、次のような値を取得する必要があります(Cのような構文を使用)。

arr[(K + N) % M];
于 2013-01-26T14:24:48.510 に答える
1

最も簡単な方法は、組み合わせをある種の配列に入れ、数値に直接インデックスを付けることです。事前に数値が有効であることを確認することもおそらく価値があります。これでうまくいくと思います(最初の行が0、最初の列が0であると仮定して、開始点を追加で変更したい場合は調整してください)

elements=[0,1,2,3,4]
out=elements((K-N)%5

クイックテスト:

N=1, K=3, out=2 correct
N=5, K=1, out=1 correct
于 2013-01-26T14:21:54.270 に答える