Istnieją dwa sposoby rozwiązania problemu:
1. Odwróć tablicę w przestrzeni.
Krok 1. Zamień elementy na początku i na końcu indeksu.
Krok 2. Zwiększ indeks początkowy, zmniejsz indeks końcowy.
Krok 3. Powtarzaj krok 1 i krok 2, aż do początku indeksu <koniec indeksu
W tym celu złożoność czasu wyniesie O (n), a złożoność przestrzeni wyniesie O (1)
Przykładowy kod do odwrócenia tablicy w przestrzeni wygląda następująco:
public static int[] reverseAnArrayInSpace(int[] array) {
int startIndex = 0;
int endIndex = array.length - 1;
while(startIndex < endIndex) {
int temp = array[endIndex];
array[endIndex] = array[startIndex];
array[startIndex] = temp;
startIndex++;
endIndex--;
}
return array;
}
2. Odwróć tablicę za pomocą tablicy pomocniczej.
Krok 1. Utwórz nową tablicę o rozmiarze równym podanej tablicy.
Krok 2. Wstaw elementy do nowej tablicy, zaczynając od indeksu początkowego, od podanej tablicy, zaczynając od indeksu końcowego.
W tym celu złożoność czasu będzie wynosić O (n), a złożoność przestrzeni będzie wynosić O (n)
Przykładowy kod do odwracania tablicy za pomocą tablicy pomocniczej wygląda następująco:
public static int[] reverseAnArrayWithAuxiliaryArray(int[] array) {
int[] reversedArray = new int[array.length];
for(int index = 0; index < array.length; index++) {
reversedArray[index] = array[array.length - index -1];
}
return reversedArray;
}
W tym celu możemy również użyć interfejsu API kolekcji Java.
Interfejs API kolekcji korzysta wewnętrznie z tego samego podejścia odwrotnego w przestrzeni.
Przykładowy kod do korzystania z interfejsu API kolekcji wygląda następująco:
public static Integer[] reverseAnArrayWithCollections(Integer[] array) {
List<Integer> arrayList = Arrays.asList(array);
Collections.reverse(arrayList);
return arrayList.toArray(array);
}