Mini-Max Sum - неправильный вывод - PullRequest
2 голосов
/ 11 марта 2020

Учитывая пять натуральных чисел, найдите минимальные и максимальные значения, которые можно рассчитать, суммируя ровно четыре из пяти целых чисел. Затем выведите соответствующие минимальные и максимальные значения в виде одной строки из двух разделенных пробелом длинных целых чисел.

Например, если массив [1, 3, 5, 7, 9]. Наша минимальная сумма составляет 1 + 3 + 5 + 7 = 16, а максимальная сумма - 3 + 5 + 7 + 9 = 24.

function miniMaxSum(arr) {
   let max = arr.reduce((a, b) => a + b, 1);

   let min = arr.reduce((a, b) => a + b, 0, arr.length - 1);

   console.log(min, max);
}

В настоящий момент выходной результат должен быть 10, 14 если массив просто [1, 2, 3, 4, 5].

Вывод, который я получаю, равен 15, 16.

Переменная max должна просто добавлять все, начиная с индекса 1 нет?

И переменная min Я не уверен, что вы можете это сделать, но я думал инициализировать, начиная с индекса 0 и go до конца массива, но минус 1 индекс.

Как я могу это исправить?

Ответы [ 3 ]

1 голос
/ 11 марта 2020

Другой подход заключается в использовании слайса и суммирования малого и большого конца массива.

function miniMax(arr) {
  const sum = a => a.reduce((a, b) => a + b, 0);

  // we can skip the sort if we know the input is sorted, but just in case
  const sorted = arr.sort((a,b) => a-b)
  
  const min = sum(sorted.slice(0, sorted.length-1))  // sum the small end of the array
  const max = sum(sorted.slice(1))  // sum the large end of the array

  return { min, max }
}

console.log(miniMax([1, 3, 5, 7, 9]));
console.log(miniMax([1, 2, 3, 4, 5]));
1 голос
/ 11 марта 2020

Это работает, только если числа перечислены в порядке возрастания в массиве

function miniMaxSum(arr)
  {
  let max = arr.reduce((a,c,i)=>i?a+c:0, 0);
  let min = arr.reduce((a,c,i,t)=>i?a+t[i-1]:0, 0);
  document.write(`${JSON.stringify(arr)} -> min: ${min}, max: ${max} <br>`);
}

miniMaxSum([1, 3, 5, 7, 9]);

miniMaxSum([1, 2, 3, 4, 5]);

Было весело делать;)

1 голос
/ 11 марта 2020

Вам необходимо определить, какие 4 из 5 элементов являются самыми большими, а какие 4 из 5 элементов являются самыми маленькими, или, что эквивалентно, определить, какой один элемент является наименьшим, а какой один элемент является самым большим и вычитает их из суммы всех 5 элементов:

function miniMaxSum(arr) {
  // fullSum: sum of all items in the array
  const fullSum = arr.reduce((a, b) => a + b, 0);
  // Find smallest value in array
  const min = Math.min(...arr);
  // Find largest value in array
  const max = Math.max(...arr);

  console.log(fullSum - max, fullSum - min);
}
miniMaxSum([1, 3, 5, 7, 9]);
miniMaxSum([1, 2, 3, 4, 5]);
...