我尝试用两种方法反转数组:
1)通过创建一个非常简单的新数组:
public static int[] reverse(int[] array) {
int[] reverseArray = new int[array.length];
for(int i = 0; i < reverseArray.length; i++) {
reverseArray[i] = array[array.length - i - 1];
}
return reverseArray;
}
2)第二种方法我得到了答案,但实际上我不太理解它,它实际上利用了交换,将数组的值赋给一个临时变量,然后将其更改并返回给原始变量:
public static int[] reverse2(int[] array)
{
for (int i=0; i < array.length / 2; i++)
{
int temp = array[i];
array[i] = array[array.length - i - 1];
array[array.length - i - 1] = temp;
}
return array;
}
有人能给我解释一下第二个代码吗?我不明白2的除法吗?如果数组大小是偶数或奇数,会发生什么?
发布于 2012-11-20 09:43:18
除以2仅仅是为了让您只遍历数组的前半部分。如果您交换了第一项和最后一项,那么当我到达array.length时,您就不想再这样做了。如果大小是偶数,它将在下半场之前停止,如果大小是奇数,它将在中心位置之前停止,而中心位置无论如何都不需要切换。希望这能有所帮助!
发布于 2012-11-20 09:45:36
除以2仅仅意味着您不必遍历数组中的所有元素。由于您要反转数组,而循环位于第一个元素,这意味着它应该只与另一端的第一个元素交换。
基本上除以2只是为了减少循环的通过次数。可以将其视为性能增强。
无论数组中元素的数量是奇数还是偶数,循环仍然工作得很好。如果元素数为奇数,循环将在中间元素之前停止。
发布于 2012-11-20 09:44:18
数组被除以2,因为您将交换位置0和n,1和n-1,等等。如果数组的值是奇数,则最后一个值应该直接位于数组的中心,不需要交换。我们可以循环数组大小除以n,因为只需要进行n/2的交换。
https://stackoverflow.com/questions/13465385
复制相似问题