Ответ 1
Если это массив объектов, то Collections.reverse(Arrays.asList(array))
выполнит задание с постоянной памятью и линейным временем - не требуется временный массив.
Я пытаюсь изменить порядок массива в 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? и, наконец, предположим, что в массиве нет нулей, поэтому все может работать. Спасибо вам
Изменить: нет, это не домашнее задание.
Если это массив объектов, то Collections.reverse(Arrays.asList(array))
выполнит задание с постоянной памятью и линейным временем - не требуется временный массив.
Вам не нужно использовать временный массив; просто перейдите через массив с начала на полпути, заменив элемент на i
для элемента at array.length-i-1
. Убедитесь, что рукоятка является средним элементом правильно (не сложно, но убедитесь, что.)
Используйте один временный элемент.
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;
}
вы можете сделать это без использования временного массива
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])
Давайте рассмотрим массив массива 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;
}
Вы можете сделать это всего за два шага
ArrayList<Element> YourTempElement= new ArrayList<Element>(mElements);
Collections.reverse(YourTempElement);