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