webentwicklung-frage-antwort-db.com.de

Reverse Array Order

Ich versuche, die Reihenfolge eines Arrays in Java umzukehren.
Was ist der effizienteste Weg, um dies in O(n) mit dem geringsten Speicherplatz zu tun.
Keine Notwendigkeit, mit Code zu antworten, Pseudo-Code ist in Ordnung.
Hier ist mein Gedankengang:

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

Gibt es eine bessere, effizientere Möglichkeit, dies zu tun, ohne ein temporäres Array zu verwenden? Und zu guter Letzt, nehmen Sie an, dass das Array keine Nullen enthält

Edit: Nein, das sind keine Hausaufgaben.

19
marcwho

Wenn es sich um ein Object-Array handelt, erledigt Collections.reverse(Arrays.asList(array)) den Job mit konstantem Speicher und linearer Zeit - es ist kein temporäres Array erforderlich.

53
Louis Wasserman

Sie müssen kein temporäres Array verwenden. Gehen Sie einfach durch das Array vom Anfang bis zur Hälfte und tauschen Sie das Element bei i gegen das Element bei array.length-i-1 aus. Vergewissern Sie sich, dass der Griff das mittlere Element richtig hält (nicht schwer zu machen, aber stellen Sie sicher, dass dies der Fall ist.)

12

Verwenden Sie ein einzelnes temporäres Element.

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

sie können dies ohne ein temporäres Array tun

  • schleife vom Anfang (oder Ende spielt keine Rolle) bis zur Mitte des Arrays 
  • swap Element mit Element at (letztes Element - Index) (also 0 und size - 1, 1 und size - 2 etc)
  • sie werden so etwas tun, um zu tauschen:
 temp = a [i]; 
 a [i] = a [end-i]; 
 a [end-i] = temp; 
  • wiederholen
3
twain249

Hier sind zwei Lösungen:

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

Eine andere Lösung ist (abhängig von Ihren Umständen), dass das Array durch Indizieren umgekehrt wird:

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

Nehmen wir an, das Array ist ein Array von Integer, dann könnten wir auch nach einer solchen Lösung suchen

arr - Array von 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, unter der Annahme von 0-basierten Indexarrays:

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