JavaScript Mini-Max Sum - 来自HackerRank网站的挑战

时间:2018-04-21 19:04:16

标签: javascript algorithm

以下是挑战:

https://www.hackerrank.com/challenges/mini-max-sum/problem

尽管我的回答是返回与预期结果匹配的相同数字,但我做错了,因为我的回答被拒绝了。 我该如何解决?

这是我尝试过的解决方案:

function miniMaxSum(arr) {   

  var arrClone1 = arr.slice() 
  var arrClone2 = arr.slice() 

  var arrMinor = arrClone1.sort(function(a, b){return a - b;})
  arrMinor.pop()

  var arrMajor = arrClone2.sort(function(a, b){return b - a;})
  arrMajor.pop()

  function getSum(a, b) {
    return a + b;
  }

  var result1 = arrMinor.reduce(getSum) 
  var result2 = arrMajor.reduce(getSum)    

  console.log(`${result1} ${result2}`) // it is returning: 10 14 

12 个答案:

答案 0 :(得分:4)

我认为解决方案应该更简单:

function miniMaxSum(arr) {
    let sum = arr.reduce((a, b) => a + b);
    let maxVal = Math.max(...arr);
    let minVal = Math.min(...arr);
    console.log((sum - maxVal) + ' ' + (sum - minVal));
}

答案 1 :(得分:1)

我找到了答案。我注意到必须将函数参数命名为' input'而不是' arr'这就是HackerRank平台拒绝答案的原因,尽管代码返回了正确的结果

就像那样

function miniMaxSum(input) {   //'input' not 'arr'    
  var arrClone1 = input.slice()   //'input' not 'arr'
  var arrClone2 = input.slice()   //'input' not 'arr'

//... rest of the code omitted

答案 2 :(得分:0)

你做得对。唯一的问题"是,您正在进行Java或C ++编码挑战。 (这就是为什么他们提到32位整数)。 输入不应该是一个数组,而是"一行由五个以空格分隔的整数。"

答案 3 :(得分:0)

这是另一种解决方案...

function miniMaxSum(arr) {

let minValue = 0, maxValue = 0, minIndex = 0, maxIndex = 0, minSum = 0, maxSum = 0;
minValue = Math.min(...arr);
maxValue = Math.max(...arr);
minIndex = arr.indexOf(minValue);
maxIndex = arr.indexOf(maxValue);

for (let i = 0; i < arr.length; i++){
    if (minIndex != i) {
        maxSum += arr[i];
    }
    if (maxIndex != i) {
        minSum += arr[i];
    }
}
   console.log(minSum, maxSum);
 }
 miniMaxSum([1,2,3,4,5]);

Click Here to RUN

答案 4 :(得分:0)

使用.reduce:

const arr = [1, 2, 3, 4, 5];

function miniMaxSum(arr) {
   const res = arr.sort((a,b) => a-b).reduce((prev, cur, i) => {
      if(i!=0) ( prev.max=prev.max+cur || cur);
      if(i!=arr.length-1) ( prev.min=prev.min+cur || cur);
      return prev;
   }, [{max:0},{min:0}]);
   console.log(res.min || 0, res.max || 0);
}

miniMaxSum(arr) // 10 14

答案 5 :(得分:0)

尝试一下,它适用于所有情况:

function miniMaxSum(arr) {
   let c = arr.sort();   
   let a = c.slice(0,4)
   let b = c.slice(1,5)
   console.log(a.reduce((p,n)=>p+n,0),b.reduce((p,n)=>p+n,0))
}

答案 6 :(得分:0)

另一种解决方案!

const numbers = arr.slice('').sort();

  let min = 0;
  let max = 0;
  for (let i = 0; i < numbers.length; i++) {
    if (i < 4) {
      min = min + numbers[i];
    }
    if (i > 0 && i < 5) {
      max += numbers[i];
    }
  }

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

答案 7 :(得分:0)

let numbers = arr.slice('').sort();
    let maxScore = 0;
    let minScore = 0;
    for(let i = 0; i < numbers.length - 1; i++) {
        minScore += numbers[i];
    };
    for(let j = 1; j < numbers.length; j++) {
        maxScore += numbers[j];
    };
    console.log(`${minScore} ${maxScore}`);
    

答案 8 :(得分:0)

function miniMaxSum(input) {
    let minElem = 0, maxElem = 0, sum = 0;

    minElem = input[0];
    maxElem = minElem;
    sum = minElem;

    for (let i = 1; i < input.length; i++) {
        sum += input[i];
        if (input[i] < minElem) {
            minElem = input[i];
        }

        if (input[i] > maxElem) {
            maxElem = input[i];
        }
    }

    let minresult = sum - maxElem;
    let maxresult = sum - minElem;
    console.log(minresult + " " + maxresult);
}

答案 9 :(得分:0)

function miniMaxSum(arr) {
    let sortarr = arr.sort();
    let maxSum = 0;
    let minSum = 0;
    for (let i=0 ; i < arr.length - 1; i++ ){
        minSum += sortarr[i];
    }
    for (let j=arr.length - 1; j > 0; j-- ){
        maxSum += sortarr[j];
    }
    console.log(minSum + ' ' + maxSum);
}

答案 10 :(得分:0)

伙计们。只是分享我的解决方案!

function miniMaxSum(input) {
    
    input.sort((a,b) => a-b)
    let min = 0, max = 0;
    for(let i=0; i < input.length; i++)
    {
        min += input[i]
        max += input[i] 
    }
    
    console.log((min - input[input.length -1]) + ' ' + (max - input[0]))
}

答案 11 :(得分:0)

这是我的解决方案 --> 这也将处理重复值和浮点值
检查下面的现场演示:

function miniMaxSum(arr) {
    let tempArr=[];
    var sum = arr.reduce((acc,cur)=>acc+cur);
    arr.map((val)=>{        
        tempArr.push(Number(sum-val));
    });
    
    // unique values only
    tempArr = [...new Set(tempArr)];
    
    console.log(`${Math.min.apply(null,tempArr)} ${Math.max.apply(null,tempArr)}`);
}

miniMaxSum([7,69,2,203,894]);