Max-Mn Sum JavaScript HackerRank挑战

问题描述 投票:1回答:5

给出五个正整数,找到可以通过对五个整数中的四个精确求和而得出的最小值和最大值。然后将各自的最小值和最大值打印为两个空格分隔的长整数的一行。

例如,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)
}
javascript max min
5个回答
1
投票

您可以将第一个值用作summinmax值的起始值,然后从第二个项目开始迭代。然后添加实际值并检查minmax值并进行调整。

[最后返回summax以及summin的增量。

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
投票

解决方案很简单,只需获取最小值和最大值,对数组求和并提取最小值或最大值即可得到最大值或最小值。

作为伪ce:

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

:)


0
投票

我已经用PHP解决了同样的问题,您可以从中获得逻辑]

 <?php

// Complete the miniMaxSum function below.
function miniMaxSum($arr) {
    $sum[]=0;
    $final[]=0;
    $great=0;
    $low=0;
    for($i=0;$i<5;$i++){
        for($j=0;$j<5;$j++){
            if($i!=$j){
                $sum[$i]+=$arr[$j];
            }
        }
    }
    $final[0]=min($sum);
    $final[1]=max($sum);
    for($i=0;$i<2;$i++){
        echo "$final[$i]"." ";
    }

}

$stdin = fopen("php://stdin", "r");

fscanf($stdin, "%[^\n]", $arr_temp);

$arr = array_map('intval', preg_split('/ /', $arr_temp, -1, PREG_SPLIT_NO_EMPTY));

miniMaxSum($arr);

fclose($stdin);

0
投票

这里有一个可以解决您问题的功能。

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
投票

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}`)
© www.soinside.com 2019 - 2024. All rights reserved.