Il existe deux façons d'avoir une solution au problème:
1. Inversez un tableau dans l'espace.
Étape 1. Échangez les éléments au début et à la fin de l'index.
Étape 2. Incrémentez l'index de début décrémentez l'index de fin.
Étape 3. Répétez les étapes 1 et 2 jusqu'à l'index de début <index de fin
Pour cela, la complexité temporelle sera O (n) et la complexité spatiale sera O (1)
Un exemple de code pour inverser un tableau dans l'espace est comme:
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. Inversez un tableau à l'aide d'un tableau auxiliaire.
Étape 1. Créez un nouveau tableau de taille égale au tableau donné.
Étape 2. Insérez des éléments dans le nouveau tableau à partir de l'index de début, du tableau donné à partir de l'index de fin.
Pour cela, la complexité temporelle sera O (n) et la complexité spatiale sera O (n)
Un exemple de code pour inverser un tableau avec un tableau auxiliaire est comme:
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;
}
De plus, nous pouvons utiliser l'API Collections de Java pour ce faire.
L'API Collections utilise en interne la même approche inverse dans l'espace.
Voici un exemple de code d'utilisation de l'API Collections:
public static Integer[] reverseAnArrayWithCollections(Integer[] array) {
List<Integer> arrayList = Arrays.asList(array);
Collections.reverse(arrayList);
return arrayList.toArray(array);
}