4

(新しい配列を作成せずに) 配列を元に戻すにはどうすればよいですか?

4

13 に答える 13

13
public static int[] reverseArrayWithoutTempArray(int[] array) {
    int i = 0, j = array.length - 1;
    for (i = 0; i < array.length / 2; i++, j--) {
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
    return array;
}
于 2012-09-04T12:53:57.353 に答える
10

宿題とは、私からの疑似コードのみを意味します。とにかく、必要な言語を指定しないことで比較的簡単になりました:-)

これを選択した言語に変換します。

Set i1 to index of first element in array
Set i2 to index of last element in array
while i1 < i2:
    Set temporary variable to element number i1
    Set element number i1 to element number i2
    Set element number i2 to temporary value
    Add 1 to i1
    Subtract 1 from i2

理想的な方法は、変数を追跡するために一枚の紙を使用して、頭の中でそのアルゴリズムを実際に実行することです。

  • 配列内の各要素。
  • i1i2
  • temporary variable.

私はより単純なアルゴリズムのためにそれをする傾向があります。より難しいものには、デバッグ ステートメントを挿入して、コンピューターが面倒な作業を実行できるようにします。次のように一枚の紙から始めます。

i1 | i2 | tempvar | el[0] | el[1] | el[2] | el[3] | el[4] | el[5]
---+----+---------+-------+-------+-------+-------+-------+------
                      H       e       l       l       o       !

手順を 1 つずつ実行し、各列を確認および/または変更します。その結果、コードを与えられるだけでなく、それがどのように機能するかを理解できるようになります。

于 2009-11-08T13:32:44.637 に答える
1

単一の変数を一時バッファーとして使用して、端を絶えず交換します。擬似コード:

temp = a[0]
a[0] = a[size - 1]
a[size - 1] = temp

等々。

于 2009-11-08T13:00:13.010 に答える
0

わざわざメモリ内の配列を逆にする必要はありません。逆方向に繰り返すだけです。

于 2009-11-08T13:22:23.387 に答える