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.
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.
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.)
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;
}
sie können dies ohne ein temporäres Array tun
size - 1
, 1 und size - 2
etc)temp = a [i]; a [i] = a [end-i]; a [end-i] = temp;
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];}
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;
}
pseudocode, unter der Annahme von 0-basierten Indexarrays:
for i in range(0, len(array)/2):
swap(array[i], array[(len(array)-1)-i])