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

问题描述 投票:0回答:26

这是挑战:

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 
javascript algorithm
26个回答
11
投票

我认为解决方案应该更容易:

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));
}

2
投票
function miniMaxSum(arr) {
// Write your code here
    let sum=arr.reduce((a,b)=>{
        return a+b;
    });
    const min=sum-Math.max(...arr);
    const max=sum-Math.min(...arr);

    console.log(min+" "+max);
}

1
投票

我找到了答案。我注意到必须将函数参数命名为“input”而不是“arr”。这就是为什么答案被 HackerRank 平台拒绝的原因,尽管代码在我的编辑器中返回了正确的结果,而不是在 HackerRank 平台中。如果您进行简单的调整,它也适用于 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

1
投票

我的解决方案:

let sumValue = arr.reduce((a, b) => {
  return a + b;
});

const min = sumValue - Math.max(...arr);
const max = sumValue - Math.min(...arr);
const result =  `${min} ${max}`

console.log(result);

1
投票

这里有一个更程序化的解决方案。


function miniMaxSum(arr) {
  let sum_min = 0
  let sum_max = 0
  let min_val = arr[0]
  let max_val = arr[0]
  let sum = 0

  for(let index = 0; index < arr.length; index += 1){
    if(arr[index] > max_val) {
      max_val = arr[index]
    }
    if(arr[index] < min_val){
      min_val = arr[index]
    }
    sum = sum +  arr[index]
  }
  sum_min = sum - max_val
  sum_max = sum - min_val

  console.log(sum_min, sum_max)
}



1
投票

这是我的解决方案,希望对您有用

function miniMaxSum(arr) {
    // Write your code here
    const max = arr.sort((a,b) => b-a).slice(0,4).reduce((a,b)=> a+b,0)
    const min = arr.sort((a,b) => b-a).reverse().slice(0,4).reduce((a,b)=> a+b,0)
    
    console.log(min,max)
}


0
投票

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


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]);

单击此处运行


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

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))
}

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}`);

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}`);
    

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);
}

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);
}

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]))
}

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]);


0
投票

这是我的解决方案

function miniMaxSum(arr) {
    // Write your code here
    var sums = [];
    for (var i=0; i<arr.length; i++) {
        var num = arr.shift();
        var sum = arr.reduce(function(acc, val) { return acc + val; }, 0);
        sums.push(sum);
        arr.push(num)
    }  
  console.log(Math.min(...sums) + " " + Math.max(...sums));  
}


0
投票
function miniMaxSum(arr) {
    let arrayMin = arr.slice() //new array for minimum
    let arrayMax = arr.slice() //new array for maximum
    
    let small = arrayMin.sort((a,b) => {return a - b}) //sort number small to big
    let big = arrayMax.sort((a,b) => {return a - b}) //sort number small to big
    
    function maxsum (a,b){return a + b} // that's function for calculate all numbers
    
    let min = small.pop() //remove last element
    let max = big.shift() //remove first element
    
    let mins = arrayMin.reduce(maxsum) //apply maxsum function to array 
    let maxs = arrayMax.reduce(maxsum) //apply maxsum function to array 
    
    console.log(`${mins} ${maxs}`)
}

0
投票

对我有用的代码如下:

function miniMaxSum(arr) {
    // Write your code here
    let min = Math.min(...arr);
    let max = Math.max(...arr);
    let arrExceptMin, arrExceptMax;
    let allEqual = arr.every(val => val === arr[0]);     
    if(allEqual) {
        return console.log(sum(arr.slice(1)) + ' ' + sum(arr.slice(1)));
    }
    if(min) {
        arrExceptMin = arr.filter(val => val !== min); 
    }
    if(max) {
        arrExceptMax = arr.filter(val => val !== max);
    } 
    return console.log(sum(arrExceptMax) + ' ' + sum(arrExceptMin));
}

0
投票

简单的解决方案(我希望),我的“arr”参数没有任何问题。

function miniMaxSum(arr) {
    // Write your code here
    let a=0, b=0;
    arr.sort();
    for(let i=0; i<4; i++) {
        a+=arr[i];
        b+=arr[i+1];
    }
    console.log(a,b)
}

0
投票

您可以缩短代码

function miniMaxSum(arr) {
// Write your code here
arr.sort((a,b) => a-b)
let min= 0, max = 0;
for(let i = 0; i < arr.length-1 ; i++){
    min += arr[i];
}
for(let j = 1; j < arr.length; j++){
    max += arr[j];
}
console.log(min,max);

}


0
投票

这是一个单循环变体。

function miniMaxSum(arr) {
    let min = 0
    let max = 0
    
    let sum = 0
    
    for (const n of arr) {
        sum += n
        
        if (!min || min > n) {
            min = n
            continue
        }
        
        if (max < n) {
            max = n
        }
    }
    
    console.log(sum - max, sum - min)
}

0
投票
function miniMaxSum(arr) {
    let arrMin = [].concat(arr).sort()
    let arrMax = [].concat(arr).sort()

    arrMin.pop();
    arrMax.shift();

    let arrMinReduced = arrMin.reduce((prev, curr) =>  prev + curr)
    let arrMaxReduced = arrMax.reduce((prev, curr) => prev + curr)

    console.log(arrMinReduced, arrMaxReduced)
}

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

0
投票

该解决方案仅使用单循环,也没有实用功能。 代码几乎是不言自明的。

function miniMaxSum(arr) {
    // Write your code here
    const total = arr[0] + arr[1] + arr[2] + arr[3] + arr[4];
    let max, min;
    for (let i = 0; i < arr.length; i++) {
        // Add all elements and subtract one element so that we sum of 4 items only
        let sum = total - arr[i];

        // Sets min & max both equal to sum on first iteration 
        if (max === undefined && min === undefined) {
            max = sum;
            min = sum; `enter code here`
        } else if (max < sum) {
            max = sum
        } else if (min > sum) {
            min = sum
        }
    }
    console.log(min, max)
}

-1
投票

const arr = [1, 2, 3, 4, 5];
let len = arr.length;
let smallest = arr[0];
let largest = arr[0];
let minSum = 0;
let maxSum = 0;

function minMax(arr, len){
    for(let i = 0; i<len; i++){
        if(arr[i] >= largest){
            largest = arr[i];
        }
        if(arr[i] <= smallest){
            smallest = arr[i];
        }
    }
    for(let i = 0; i < len; i++){
        if(arr[i] > smallest){
            maxSum += arr[i];
        }
        if(arr[i] < largest){
            minSum += arr[i];
        }
    }
    return console.log(minSum, maxSum)

}

minMax(arr, len)


-1
投票

我认为以尽可能少的行数解决方案

'函数 miniMaxSum(arr) {

arr.sort((a,b)=>a-b);
let fSum=0, lSum=0;
for(let x=0; x<arr.length-1; x++){
    fSum+=arr[x]
}
for(let x=1; x<arr.length; x++){
    lSum+=arr[x]
}
console.log(fSum+" "+lSum);

}'

© www.soinside.com 2019 - 2024. All rights reserved.