Подтвердить что ты не робот

Обратный порядок массивов

Я пытаюсь изменить порядок массива в java.
Каков наиболее эффективный способ сделать это в O (n) с наименьшим количеством используемой памяти.
Не нужно отвечать с кодом, псевдокод будет в порядке.
Вот мой мыслительный процесс:

  create a new temp array //I think this is a waste of memory, 
                          //but I am not sure if there 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 say the 
            //original array is Object[] arr; and the temp array is 
            //Object[] temp. Can I do temp = arr; ?

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

Изменить: нет, это не домашнее задание.

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

Используйте один временный элемент.

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

Ответ 4

вы можете сделать это без использования временного массива

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

Ответ 5

Здесь два решения:

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

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

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

Ответ 6

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

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

Ответ 7

Давайте рассмотрим массив массива Integer, тогда мы также могли бы найти такое решение, как this

arr - массив Integer

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

Ответ 8

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

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