Existem duas maneiras de ter uma solução para o problema:
1. Inverta uma matriz no espaço.
Etapa 1. Troque os elementos no índice inicial e final.
Etapa 2. Incremente o índice inicial e diminua o índice final.
Etapa 3. Repita a Etapa 1 e a Etapa 2 até o índice inicial <índice final
Para isso, a complexidade do tempo será O (n) e a complexidade do espaço será O (1)
O código de exemplo para reverter uma matriz no espaço é como:
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. Inverta uma matriz usando uma matriz auxiliar.
Etapa 1. Crie uma nova matriz de tamanho igual à matriz especificada.
Etapa 2. Insira elementos na nova matriz iniciando no índice inicial, a partir da matriz especificada iniciando no índice final.
Para isso, a complexidade do tempo será O (n) e a complexidade do espaço será O (n)
O código de exemplo para reverter uma matriz com matriz auxiliar é como:
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;
}
Além disso, podemos usar a API Collections de Java para fazer isso.
A API de coleções usa internamente o mesmo método de inversão no espaço.
O código de exemplo para usar a API de coleções é como:
public static Integer[] reverseAnArrayWithCollections(Integer[] array) {
List<Integer> arrayList = Arrays.asList(array);
Collections.reverse(arrayList);
return arrayList.toArray(array);
}