Дан метод на Java. Данный метод рекурсивный, выполняет функцию поиска непересекающихся прямоугольников из списков ArrayList.
private static boolean mapSeparator(int index, Rect rectangle) {
boolean isTrue = false;
int vacationsSize = vacations.size();
//добавление всех прямоугольников без пересечения
if (index + 2 < vacationsSize) {
if (!Vacation.getUniqueRect(rectangle).isEmpty()) { //если есть прямоугольники - сохраняем их, добавляем trueRect
ArrayList<Rect> middleRects = new ArrayList<>(Vacation.getUniqueRect(rectangle));
trueRects.add(middleRects.get(0));
for (Rect middleRect : middleRects) {//закидываем каждый middleRect в следующий шаг
trueRects.set(index + 1, middleRect);//если из следующей не вернулся прямоугольник - заменяем middleRect
if (mapSeparator(index + 1, middleRect)) {
return true;
}
}
if (!isTrue) {
trueRects.remove(index + 1);
}
} else {
isTrue = false;//если нет нужных прямоугольников - возвращаем false
}
} else if (index + 1 < vacationsSize) {
if (!Vacation.getUniqueRect(rectangle).isEmpty()) {
trueRects.add(Vacation.getUniqueRect(rectangle).get(0));
isTrue = true;
}
} else isTrue = true;//если дошли до конца - есть решение, возвращаем true
return isTrue;
}
Суть работы метода: есть первый набор прямоугольников. Из них берется первый, к нему подбираются прямоугольники из второго набора. Далее из полученного набора берется так же первый прямоугольник, к которому идет подбор из третьего и т.д. Если не нашлось нужных прямоугольников из следующего набора - проверяется следующий прямоугольник. Из каждого набора должен вернуться 1 прямоугольник.
Необходимо ускорить работу данного метода. Как это можно сделать? Как вариант - замена рекурсии на итерацию, но как это можно осуществить и можно ли вообще?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Только начал изучать Java, столкнулся с такой проблемойНеобходимо написать алгоритм блочной перестановки
Реализую шифрование сообщения с использованием класса EnvelopedSignature
Не получается использовать бины в выражения в Activiti (в ServiceTask)Он пишет, что не видит этот бин