我试图在Java中反转一个int数组。
此方法不反转数组。
for(int i = 0; i < validData.length; i++)
{
int temp = validData[i];
validData[i] = validData[validData.length - i - 1];
validData[validData.length - i - 1] = temp;
}
有什么问题吗?
我试图在Java中反转一个int数组。
此方法不反转数组。
for(int i = 0; i < validData.length; i++)
{
int temp = validData[i];
validData[i] = validData[validData.length - i - 1];
validData[validData.length - i - 1] = temp;
}
有什么问题吗?
当前回答
使用XOR解决方案来避免临时变量,您的代码应该是这样的
for(int i = 0; i < validData.length; i++){
validData[i] = validData[i] ^ validData[validData.length - i - 1];
validData[validData.length - i - 1] = validData[i] ^ validData[validData.length - i - 1];
validData[i] = validData[i] ^ validData[validData.length - i - 1];
}
请看这个链接来获得更好的解释:
http://betterexplained.com/articles/swap-two-variables-using-xor/
其他回答
最有效的方法是向后迭代数组。
我不确定Aaron的解决方案是否调用Collections.reverse(list);有人知道吗?
static int[] reverseArray(int[] a) {
int ret[] = new int[a.length];
for(int i=0, j=a.length-1; i<a.length && j>=0; i++, j--)
ret[i] = a[j];
return ret;
}
上面有一些很棒的答案,但我是这样做的:
public static int[] test(int[] arr) {
int[] output = arr.clone();
for (int i = arr.length - 1; i > -1; i--) {
output[i] = arr[arr.length - i - 1];
}
return output;
}
你可以用这个
public final class ReverseComparator<T extends Comparable<T>> implements Comparator<T> {
@Override
public int compare(T o1, T o2) {
return o2.compareTo(o1);
}
}
一个简单的
Integer[] a = {1,6,23,4,6,8,2}
Arrays.sort(a, new ReverseComparator<Integer>());
有两种方法可以解决这个问题:
1. 在空格中反转数组。
步骤1。交换开始和结束索引处的元素。
步骤2。递增开始索引,递减结束索引。
步骤3。重复步骤1和步骤2,直到开始索引<结束索引
此时,时间复杂度为O(n)空间复杂度为O(1)
在空间中反转数组的示例代码如下:
public static int[] reverseAnArrayInSpace(int[] array) {
int startIndex = 0;
int endIndex = array.length - 1;
while(startIndex < endIndex) {
int temp = array[endIndex];
array[endIndex] = array[startIndex];
array[startIndex] = temp;
startIndex++;
endIndex--;
}
return array;
}
2. 使用辅助数组反转数组。
步骤1。创建一个大小等于给定数组的新数组。
步骤2。元素从开始索引开始插入到新数组中 给定数组,从结束索引开始。
因此,时间复杂度为O(n)空间复杂度为O(n)
用辅助数组反转数组的示例代码如下:
public static int[] reverseAnArrayWithAuxiliaryArray(int[] array) {
int[] reversedArray = new int[array.length];
for(int index = 0; index < array.length; index++) {
reversedArray[index] = array[array.length - index -1];
}
return reversedArray;
}
此外,我们可以使用Java中的Collections API来实现这一点。
Collections API在内部使用相同的反向空间方法。
使用Collections API的示例代码如下:
public static Integer[] reverseAnArrayWithCollections(Integer[] array) {
List<Integer> arrayList = Arrays.asList(array);
Collections.reverse(arrayList);
return arrayList.toArray(array);
}