n 要素の 1 次元配列が与えられた場合、配列の要素が左 m 位置になるように配列を効率的に回転するにはどうすればよいでしょうか? 定数 O(1) メモリのみを使用して O(n) 時間の複雑さでこれを行うことは可能ですか?
たとえば、n=8 で配列が[0, 1, 2, 3, 4, 5, 6, 7]
m=2 だけ左に回転すると、 が得られ[2, 3, 4, 5, 6, 7, 0, 1]
ます。
これは、私が実装した Python の単純なソリューションで、一時配列で O(n) 時間と O(n) メモリを使用します。
def rotateLeft(A, m):
temp = [None]*len(A)
for i in xrange(len(temp)):
temp[i] = A[(i + m) % len(A)]
for i in xrange(len(A)):
A[i] = temp[i]
どうすればこれをより効率的に行うことができますか? これは、一定量のメモリで、まだ O(n) 時間で実行できると言われました。
どの言語での解決策も問題ありません。提案は大歓迎です。
編集: ライブラリ ソリューションを探しているわけではありません。さらに、配列はリンクされたリスト/両端キューではありません。head/tail/next/previous 要素の概念はありません。