Есть два способа решения проблемы:
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 Коллекций из Java для этого.
API коллекций внутренне использует тот же самый обратный подход в пространстве.
Пример кода для использования Collections API выглядит следующим образом:
public static Integer[] reverseAnArrayWithCollections(Integer[] array) {
List<Integer> arrayList = Arrays.asList(array);
Collections.reverse(arrayList);
return arrayList.toArray(array);
}