在不创建新数组的情况下反转字符数组

mir*_*iam 3 arrays algorithm reverse

如何在适当的位置反转数组(不创建新数组)?

Asa*_*Rao 12

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;
}
Run Code Online (Sandbox Code Playgroud)


pax*_*blo 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
Run Code Online (Sandbox Code Playgroud)

理想的做法是在头脑中实际运行该算法,使用一张纸来跟踪变量:

  • 每个元素都在数组中.
  • i1i2.
  • temporary variable.

我倾向于为更简单的算法做到这一点.更难的我插入调试语句,以便计算机可以为我做那些笨拙的工作.从一张纸开始,这样:

i1 | i2 | tempvar | el[0] | el[1] | el[2] | el[3] | el[4] | el[5]
---+----+---------+-------+-------+-------+-------+-------+------
                      H       e       l       l       o       !
Run Code Online (Sandbox Code Playgroud)

然后逐个执行这些步骤,检查和/或更改每个列.这将使您了解它的工作方式远比给出一些代码更好.