22 февраля 2023
Тэги: Java, алгоритмы, головоломки.
Давайте рассмотрим алгоритм инвертирования массива. На вход нам подаётся массив произвольной длины и нужно поменять порядок следования его элементов на обратный. То есть сделать первый элемент последним, второй – предпоследним и т.д.
Для массива целых чисел реализация алгоритма на Java будет выглядеть так:
Метод invertArray() получает исходный массив в качестве параметра. Затем в цикле проходим по первой половине элементов и на каждой итерации меняем местами элемент с индексом i и элемент с таким же смещением, но с конца массива (array.length – i – 1). Чтобы обменять значения местами мы используем временную переменную.
Середину массива мы определяем как array.length / 2. В случае с чётным количеством элементов мы пройдём ровно первую половину элементов. В случае с нечётным количеством центральный элемент мы трогать не будем, т.к. при инверсии он остаётся на месте.
Обратите внимание, что мы модифицируем исходный массив, т.е. не расходуем дополнительную память (кроме разве что временной переменной). Это является преимуществом для очень больших объёмов данных.
Но массивы бывают не только целочисленные. Давайте модифицируем наш метод и сделаем его обобщённым.
Метод invertGenericArray() типизируется произвольным типом T, поэтому поддерживает массивы любых типов. Сама логика метода осталась без изменений.
Kotlin, Java, Spring, Spring Boot, Spring Data, SQL, PostgreSQL, Oracle, Linux, Hibernate, Collections, Stream API, многопоточность, файлы, Nginx, Apache, maven, gradle, JUnit, YouTube, новости, руководство, ООП, алгоритмы, головоломки, rest, GraphQL, Excel, XML, json, yaml.