Max-Mn Sum JavaScript HackerRank Challenge - PullRequest
1 голос
/ 23 февраля 2020

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

Например, var arr = [1,3,5,7,9], результат будет 16 24.

Вот мое решение. работает, кроме одного случая. Когда все элементы в arr равны, мои решения возвращают ошибку. Как я могу это исправить?

function miniMaxSum(arr) {
    let largest = arr[0];
    let smallest = arr[0];
    let largestSum = 0;
    let smallestSum = 0;
    for(let i = 0; i < arr.length; i ++){
      if(arr[i] > largest){
        largest = arr[i];
      }
      if (arr[i] < smallest){
        smallest = arr[i];
      }
    }
    for(let j = 0; j < arr.length; j ++){
      if(arr[j] < largest){
        smallestSum = smallestSum + arr[j];
      }
      if(arr[j] > smallest){
        largestSum = largestSum + arr[j];
      }
    }
    console.log(smallestSum + " " + largestSum)
}

Ответы [ 4 ]

1 голос
/ 23 февраля 2020

Вы можете принять первое значение в качестве начального значения для значений sum, min и max и выполнить итерацию из второго элемента. Затем добавьте фактическое значение, проверьте значения min и max и внесите корректировки.

В конце верните дельту sum и max и sum и min.

function minMaxSum(array) {
    var sum = array[0],
        min = array[0],
        max = array[0];
        
    for (let i = 1; i < array.length; i++) {
        sum += array[i];
        if (min > array[i]) min = array[i];
        if (max < array[i]) max = array[i];
    }

    return [sum - max, sum - min];
}

console.log(minMaxSum([1, 3, 5, 7, 9]));
0 голосов
/ 23 февраля 2020

Using ES6:

let numbers = [3,1,5,9,7]

let ascending = JSON.parse(JSON.stringify(numbers)).sort((a, b) => a - b)
ascending.pop()
let min = ascending.reduce((a, b) => a + b)

let descending = JSON.parse(JSON.stringify(numbers)).sort((a, b) => b - a)
descending.pop()
let max = descending.reduce((a, b) => a + b)

console.log(`${min} ${max}`)

ИЛИ

let numbers = [3,1,5,9,7]

let sum = numbers.reduce((a, b) => a + b)

let maxNumber = Math.max(...numbers)
let minNumber = Math.min(...numbers)

console.log(`${sum - maxNumber} ${sum - minNumber}`)
0 голосов
/ 23 февраля 2020

Здесь функция, которая решает вашу проблему.

const minMaxSum = (arr) => {
    const orderedAr = arr.sort((a, b) => a - b);
    const min = orderedAr
        .slice(0, 4)
        .reduce((val, acc) => acc + val, 0);
    const max = orderedAr
        .slice(-4)
        .reduce((val, acc) => acc + val, 0);
    return `${min} ${max}`;
};
0 голосов
/ 23 февраля 2020

Решение простое, просто получите минимальное и максимальное значение, суммируйте массив и извлекайте минимальное или максимальное значение, чтобы получить максимальную или минимальную сумму.

Как псевдоцеда:

min_value = find_min_value(arr)
max_value = find_max_value(arr)
max_sum = sum_array(arr) - min_value
min_sum = sum_array(arr) - max_value

:)

...