Я пытаюсь решить простую задачу оптимизации и предложил решение.Просто интересно, правильно это или нет.Вот описание проблемы
Существует транспортное средство, которое может проехать общее определенное максимальное расстояние, например 3000 миль, после чего оно нуждается в обслуживании.Есть 2 массива, один массив outgoing
и один массив returning
.Каждый элемент массива обозначает расстояние.Мне нужно придумать 2 числа, одно из массива outgoing
, а другое из массива incoming
, которое максимально использует автомобиль.Скажите, могу ли я использовать общее расстояние 3000, оно самое лучшее или самое близкое к нему.Я написал для нее программу и надеялся, что смогу получить информацию от других, если она правильная или имеет недостаток.
public class Vehicle {
public static void main(String[] args) {
Integer[] outgoing = {2710,300,2500,2800,700};
Integer[] returning = {2200,289,490};
int l1=0,l2=0;
Arrays.sort(outgoing, Collections.reverseOrder());
Arrays.sort(returning);
int range = 3000;
int max = 0;
int out = 0;
int ret = 0;
while(l1<outgoing.length && l2<returning.length) {
int sum = outgoing[l1]+returning[l2];
if (sum<=range && sum>max) {
max = sum;
out = outgoing[l1];
ret = returning[l2];
}
if(sum>range) {
l1++;
} else {
l2++;
}
}
System.out.println(max);
System.out.println(out);
System.out.println(ret);
}
}
Подход, который я использую, заключается в том, что я сортирую массив outgoing
в обратном порядке.порядок и returning
в естественном порядке.Затем я пытаюсь найти максимально возможную сумму, выбирая один элемент из каждого массива.Если временная сумма превышает максимально допустимое расстояние, я перемещаю указатель массива в порядке убывания, в противном случае я перемещаю указатель массива в порядке возрастания.