反转数组中的元素
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] 到底是做什么的?它究竟是如何反转元素的?
它通过交换 first
和 last
元素,second
和 second_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
用作存储其中一个的临时位置交换期间的值,以便它在被其他值覆盖时不会丢失。
复制 i
处的值:
int temporaryVariable = array[i];
将项目 i
放在数组末尾 (array.length - 1 - i
) 而不是它。
array[i] = array[array.length - 1 - i];
将临时存储的项目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 第三个?我迷路了。
我一直在研究反转数组中元素的 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] 到底是做什么的?它究竟是如何反转元素的?
它通过交换 first
和 last
元素,second
和 second_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
用作存储其中一个的临时位置交换期间的值,以便它在被其他值覆盖时不会丢失。
复制
i
处的值:int temporaryVariable = array[i];
将项目
i
放在数组末尾 (array.length - 1 - i
) 而不是它。array[i] = array[array.length - 1 - i];
将临时存储的项目
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 第三个?我迷路了。