反向数组顺序

时间:2012-04-03 14:33:01

标签: java arrays reverse

我试图颠倒java中数组的顺序 在O(n)中使用最少内存量的最有效方法是什么 无需用代码回答,伪代码也没问题 这是我的思考过程:

  create a new temp array //I think this is a waste of memory, 
                          //but I am not sure if there's a better way
 grab elements from the end of the original array -decrement this variable
 insert element in beginning of temp array -increment this variable
then make the original array point to the temp array? //I am not sure 
            //if I can do this in java; so let's say the 
            //original array is Object[] arr; and the temp array is 
            //Object[] temp. Can I do temp = arr; ?

有没有更好的方法可以在不使用临时数组的情况下执行此操作? 最后,假设数组中没有空值,所以一切都可以工作。 谢谢

编辑:不,这不是作业。

8 个答案:

答案 0 :(得分:53)

如果它是一个Object数组,那么Collections.reverse(Arrays.asList(array))将以恒定的内存和线性时间完成工作 - 不需要临时数组。

答案 1 :(得分:12)

您不需要使用临时数组;只需从头到尾逐步遍历数组,将i处的元素换成array.length-i-1处的元素。确保正确处理中间元素(不难做,但要确保。)

答案 2 :(得分:11)

使用单个临时元素。

int array[SIZE];
int temp;

for (int i = 0; i < SIZE/2; i++)
  {
     temp = array[i];
     array[i] = array[SIZE-1 - i];
     array[SIZE-1 - i] = temp;
  }

答案 3 :(得分:3)

你可以在不需要临时数组的情况下完成它

  • 从一开始(或结束无关紧要)循环到数组的中间
  • 使用元素交换元素(最后一个元素 - 索引)(所以0和size - 1,1和size - 2等)
  • 你会做这样的事情来交换:
    temp = a[i];
    a[i] = a[end-i];
    a[end-i] = temp;
  • 重复

答案 4 :(得分:1)

这是两个解决方案:

    loop to N/2
      swap each element at i with element at N - i

另一个解决方案是(根据您的具体情况)伪造通过索引来反转数组:

    GetValueAt(int i){return array[N - i];}

答案 5 :(得分:0)

伪代码,假设基于0的索引数组:

for i in range(0, len(array)/2):
     swap(array[i], array[(len(array)-1)-i])

答案 6 :(得分:0)

让我们考虑数组是Integer数组,然后我们也可以寻找像这样的解决方案

arr - 整数数组

for(int i=0,int J<arr.length-1 ; i<j ; i++,j--)
{
    temp =a[i];
    a[i]=a[j];
    a[j]=temp;
 }

答案 7 :(得分:-2)

您只需两步即可完成此操作

ArrayList<Element> YourTempElement= new ArrayList<Element>(mElements);
Collections.reverse(YourTempElement);