Існує два способи вирішити проблему:
1. Зворотний масив у просторі.
Крок 1. Поміняйте місцями елементи на початковому та кінцевому індексах.
Крок 2. Збільшення стартового індексу зменшення кінцевого індексу.
Крок 3. Повторіть крок 1 та крок 2 до початку індексу <кінцевий індекс
Для цього часова складність буде O (n), а просторова складність буде O (1)
Приклад коду для повернення масиву в просторі виглядає так:
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. Зворотний масив за допомогою допоміжного масиву.
Крок 1. Створіть новий масив розміром, рівний заданому масиву.
Крок 2. Вставте елементи в новий масив, починаючи з початкового індексу, з даного масиву, починаючи з кінцевого індексу.
Для цього часова складність буде O (n), а просторова складність буде O (n)
Приклад коду для реверсування масиву з допоміжним масивом виглядає так:
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;
}
Також для цього ми можемо використовувати API Collections від Java.
API Collections внутрішньо використовує той же зворотний підхід у просторі.
Приклад коду для використання API колекцій виглядає так:
public static Integer[] reverseAnArrayWithCollections(Integer[] array) {
List<Integer> arrayList = Arrays.asList(array);
Collections.reverse(arrayList);
return arrayList.toArray(array);
}