Javaで配列の順序を逆にしようとしています。
最小のメモリ使用量でO(n))を実行する最も効率的な方法は何ですか。
コードで答える必要はありません。擬似コードで問題ありません。
これが私の思考プロセスです。
create a new temp array //I think this is a waste of memory,
//but I am not sure if there's a better way
grab elements from the end of the original array -decrement this variable
insert element in beginning of temp array -increment this variable
then make the original array point to the temp array? //I am not sure
//if I can do this in Java; so let's say the
//original array is Object[] arr; and the temp array is
//Object[] temp. Can I do temp = arr; ?
おそらく一時配列を使用せずにこれを行うより効率的な方法はありますか?最後に、配列にnullがないため、すべてが機能すると仮定します。ありがとうございました
編集:いいえ、これは宿題ではありません。
Object配列の場合、Collections.reverse(Arrays.asList(array))
は一定のメモリと線形時間でジョブを実行します。一時的な配列は不要です。
一時配列を使用する必要はありません。配列を最初から途中までステップスルーして、i
の要素をarray.length-i-1
の要素と交換します。中央の要素を正しく処理するようにしてください(難しくはありませんが、確認してください)。
単一のtemp要素を使用します。
int array[SIZE];
int temp;
for (int i = 0; i < SIZE/2; i++)
{
temp = array[i];
array[i] = array[SIZE-1 - i];
array[SIZE-1 - i] = temp;
}
一時配列を必要とせずにそれを行うことができます
size - 1
、1およびsize - 2
etc)temp = a [i]; a [i] = a [end-i]; a [end-i] = temp;
2つのソリューションがあります。
loop to N/2
swap each element at i with element at N - i
別の解決策は、(状況に応じて)インデックスを作成して配列を逆にすることです:
GetValueAt(int i){return array[N - i];}
配列が整数の配列であると考えてみましょう。次に、このような解決策を探すこともできます
arr-整数の配列
for(int i=0,int J<arr.length-1 ; i<j ; i++,j--)
{
temp =a[i];
a[i]=a[j];
a[j]=temp;
}
0ベースのインデックス配列を想定した擬似コード:
for i in range(0, len(array)/2):
swap(array[i], array[(len(array)-1)-i])