反转数组中的元素

Reversing elements in array

我一直在研究反转数组中元素的 for 循环,但我不太明白其中发生了什么。这是代码:

 int middleIndex = (array.length) / 2;

    for (int i = 0; i < middleIndex; i++) {
        int temporaryVariable = array[i];
        array[i] = array[array.length - 1 - i];
        array[array.length - 1 - i] = temporaryVariable;
    }

下面两行 int temporaryVariable = array[i] 到底是做什么的?它究竟是如何反转元素的?

它通过交换 firstlast 元素,secondsecond_last 等来有效地反转数组的元素。这样操作的次数是 ayrray_length / 2.

int temporaryVariable = array[i]; 之后的两行只是将第 i 个元素与最后一个元素的第 i 个元素交换,我们 运行 这个循环将数组中的元素数量减半。

此算法对存储在数组中的交换值进行 N/2 次迭代。它从数组的开头(索引 0)开始,一直到它的一半(索引 N/2)。它将第一个元素(索引为 0)与最后一个元素(索引为 N - 1 - 0)交换,然后将第二个元素(索引为 0 + 1)与最后一个元素(索引为 N - 1 - (0 + 1)之前的元素交换)), 等等。

首先记住数组索引是从0开始的。 所以最后一个元素的索引是 array.length - 1.

这 3 行将第一项与最后一项交换,然后将第二项与倒数第二项交换,依此类推。temporaryVariable 用作存储其中一个的临时位置交换期间的值,以便它在被其他值覆盖时不会丢失。

  1. 复制 i 处的值:

    int temporaryVariable = array[i];

  2. 将项目 i 放在数组末尾 (array.length - 1 - i) 而不是它。

    array[i] = array[array.length - 1 - i];

  3. 将临时存储的项目i放在倒数第i处(array.length - 1 - i)。

    array[array.length - 1 - i] = temporaryVariable;

i到达数组的中间时循环停止。 (如果数组的元素数量为奇数,则中间的元素将保留在原处。)

另一部分是return第二大的数字,但由于某种原因它return是第三大的数字,这真的很奇怪。

这是代码:

public static int returnSecondBiggest(int[] array) {
int largestElement = array[0];
for (int i = 1; i < array.length; i++) {
    if (array[i] > largestElement) {
        largestElement = array[i];
    }
}

int secondBiggest = Integer.MIN_VALUE;
for (int i = 0; i < array.length; i++) {
    if (array[i] > secondBiggest && array[i] != largestElement) {
        secondBiggest = array[i];
    }
}

return secondBiggest;

}

当代码应该 return 第二个时,它如何 return 第三个?我迷路了。