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