В настоящее время я решаю эту проблему на 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