Hay dos formas de tener una solución para el problema:
1. Invierta una matriz en el espacio.
Paso 1. Intercambie los elementos al inicio y al final del índice.
Paso 2. Incremente el índice inicial disminuya el índice final.
Paso 3. Itere el Paso 1 y el Paso 2 hasta el índice inicial <índice final
Para esto, la complejidad del tiempo será O (n) y la complejidad del espacio será O (1)
El código de muestra para invertir una matriz en el espacio es 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. Invierta una matriz utilizando una matriz auxiliar.
Paso 1. Cree una nueva matriz de tamaño igual a la matriz dada.
Paso 2. Inserte elementos en la nueva matriz comenzando desde el índice inicial, desde la matriz dada comenzando desde el índice final.
Para esto, la complejidad temporal será O (n) y la complejidad espacial será O (n)
El código de muestra para invertir una matriz con matriz auxiliar es 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;
}
Además, podemos usar la API de colecciones de Java para hacer esto.
La API de colecciones usa internamente el mismo enfoque inverso en el espacio.
El código de muestra para usar la API de colecciones es como:
public static Integer[] reverseAnArrayWithCollections(Integer[] array) {
List<Integer> arrayList = Arrays.asList(array);
Collections.reverse(arrayList);
return arrayList.toArray(array);
}