Я сейчас решаю эту проблему на Hackerrank:
https://www.hackerrank.com/challenges/mini-max-sum/problem
Я прошел только 5 из 15 тестовых случаев. Проблема в выводе максимальной суммы.
В коде сначала я нахожу максимальный и минимальный элемент в векторе, обозначаемый как max и min. minI и maxI - индексы минимального и максимального значения.
При вычислении максимальной суммы я кладу arr [minI] = 0 (поэтому вектор сводится к элементам, которые дают максимальную сумму). Как только максимальная сумма получена, я положил arr [minI] = min, следовательно, восстановив исходный вектор Затем я повторяю процесс, помещая arr [maxI] = 0; таким образом получается как минимальная, так и максимальная сумма n-1 элементов. Я знаю, что это трудно понять, но кто-нибудь может помочь мне разобраться в проблеме здесь.
Я пытался использовать arr.erase () и arr.insert (), но у меня возникли проблемы с индексацией.
void miniMaxSum(vector<int> arr) {
int max = arr[0];
int min = arr[0];
int minI = 0;
int maxI = 0;
for (int i = 0; i < arr.size(); i++) {
if(arr[i] > max){
max = arr[i];
maxI = i;
}
if(arr[i] < min){
min = arr[i];
minI = i;
}
}
arr[minI] = 0;
int maxsum = 0;
for(int i = 0; i<arr.size(); i++){
maxsum += arr[i];
}
arr[minI] = min;
arr[maxI] = 0;
int minsum = 0;
for(int i = 0; i<arr.size(); i++){
minsum += arr[i];
}
cout << minsum << " " << maxsum;
}
Например, ввод одного контрольного примера был:
140537896 243908675 670291834 923018467 520718469
Правильный ответ на приведенный выше ввод:
1575456874 2357937445
Мой ответ для приведенного выше ввода:
1575456874 -1937029851