Обратный Порядок Массива

Я пытаюсь изменить порядок массива в 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; ?

есть ли более эффективный способ сделать это, возможно, не используя временный массив? и, наконец, предположим, что в массиве нет нулей, поэтому все может работать. Спасибо

Edit: нет, это не так домашнее задание.

8 ответов


Если это массив объектов, затем Collections.reverse(Arrays.asList(array)) будет выполнять работу с постоянной памятью и линейным временем - не требуется временный массив.


вам не нужно использовать временный массив; просто пройдите через массив от начала до середины, поменяв элемент на i для элемента array.length-i-1. Убедитесь, что ручка среднего элемента правильно (не трудно сделать,но убедитесь.)


используйте один элемент temp.

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;
  }

вы можете сделать это без необходимости Temp array

  • цикл от начала (или конца не имеет значения) до середины массива
  • элемент подкачки с элементом at (последний элемент-индекс) (так 0 и size - 1, 1 и size - 2 и т. д.)
  • вы что-нибудь поменять:
    temp = a[i];
    a[i] = a[end-i];
    a[end-i] = temp;
  • повторить

вот:

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

другое решение (в зависимости от ваших обстоятельств) поддельное обращение массива путем индексирования:

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

псевдокод, предполагая массивы индексов на основе 0:

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

давайте рассмотрим массив массива целого числа, тогда мы могли бы также искать решение, подобное этому

arr-массив целого числа

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

вы можете сделать это всего два шага

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