web-dev-qa-db-fra.com

Ordre inversé du tableau

J'essaie d'inverser l'ordre d'un tableau en Java.
Quel est le moyen le plus efficace de le faire avec O(n) avec le moins de mémoire utilisée?.
Pas besoin de répondre avec du code, le pseudo-code ira bien.
Voici mon processus de pensée:

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

Existe-t-il un moyen plus efficace de le faire sans utiliser de tableau temporaire? Enfin, supposons qu’il n’y ait pas de valeur NULL dans le tableau, tout peut donc fonctionner ... ..

Edit: non ce n'est pas un devoir.

19
marcwho

S'il s'agit d'un tableau d'objets, alors Collections.reverse(Arrays.asList(array)) effectuera le travail avec une mémoire constante et une durée linéaire - aucun tableau temporaire n'est requis.

53
Louis Wasserman

Vous n'avez pas besoin d'utiliser un tableau temporaire; parcourez le tableau du début à la moitié, en remplaçant l'élément à i par l'élément à array.length-i-1. Assurez-vous de bien manipuler l’élément central (ce n’est pas difficile, mais assurez-vous.)

12

Utilisez un seul élément 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;
  }
10
ArjunShankar

vous pouvez le faire sans avoir besoin d'un tableau temporaire

  • boucle du début (ou la fin n'importe pas) au milieu du tableau 
  • élément swap avec élément at (dernier élément - index) (donc 0 et size - 1, 1 et size - 2 etc)
  • vous ferez quelque chose comme ceci pour échanger:
 temp = a [i]; 
 a [i] = a [end-i]; 
 a [end-i] = temp; 
  • répéter
3
twain249

Voici deux solutions:

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

Selon votre situation, une autre solution consiste à simuler l’inversion du tableau en indexant:

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

Considérons que le tableau est de tableau d'Integer, alors nous pourrions aussi chercher une solution comme celle-ci.

arr - tableau d'integer

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

pseudocode, en supposant que les tableaux à index basés sur 0:

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