Я делаю упражнение, в котором для массива из N значений мне нужно получить два числа, чтобы их вычитание (самое высокое - самое низкое) было самым положительным числом.Я хочу, чтобы v было больше, чем с ... дело в том, что ... скажем, я хочу покупать аукционы по цене C, чтобы я мог продавать их по цене V и получать максимальную прибыль, а каждая ячейка массива - этоцена этого аукциона в день t, поэтому я хочу купить по наименьшей возможной цене, чтобы я мог продавать по максимально возможной цене, поэтому C должен появиться перед V в массиве.Например:
n = 8
arr = {6,7,3,8,9,2,1,4,20}
Я хочу c = 1
и v = 20
, потому что 20 - 1 = 19
(это означает, что вычитание из этих двух чисел является наибольшим)
Другой пример:
n = 6
arr = {8,12,45,40,18,29}
Я хочу c = 8
и v = 45
, потому что их вычитание является наибольшим числом всех остальных вычитаний.(Я хочу уточнить, что с не всегда наименьшее число в массиве).ОБА ЧИСЛА НЕ ДОЛЖНА БЫТЬ СЛЕДУЮЩЕЙ.Если у меня есть n = 1, {1}
, то c = 1
и v = 1
.
В этом примере демонстрируется, что c и v не всегда являются самыми низкими / самыми высокими значениями.
n = 6
arr = {19,27,5,6,7,8}
В этом случае c = 19
и v = 27
Кроме того, мне нужно решить эту проблему с помощью кода сортировки слиянием много (примеры делят его на два метода: mergesort , который обрабатывает рекурсии, и слияние , которое выполняет смену позиций с помощью массива aux).
Я использую код слияния (слияние, по моему мнению, не нужно, потому чтоне заботится о сортировке), пока у меня есть следующий код, но он явно неправильный, может кто-нибудь сказать мне, что я делаю неправильно?
public static void mergeSort(int start, int end) {
if(start < end) {
int half = (start + end) / 2;
mergeSort(start, half);
for(int i = start; start < half; start++, i++){
if((arr[i+1] - arr[i]) > temp){
temp = arr[i+1] - arr[i];
c = i;
v = i+1;
}
}
mergeSort(half+1, end);
for(int i = half+1; i < end; half++, i++){
if((arr[i+1] - arr[i]) > temp){
temp = arr[i+1] - arr[i];
c = i;
v = i+1;
}
}
}
}
Заранее спасибо за любую помощь, которую вы можете предложить!