【问题标题】:JavaScript Mini-Max Sum - Challenge from HackerRank websiteJavaScript Mini-Max Sum - 来自 HackerRank 网站的挑战
【发布时间】:2021-12-31 03:24:17
【问题描述】:

这是挑战:

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 

【问题讨论】:

  • 您发布的代码在 HackerRank 上非常适合我。 (我将您的函数主体粘贴在它说“在此处编写代码”的下方。)

标签: javascript algorithm


【解决方案1】:

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

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

【讨论】:

  • 您如何在我的回答中看到,它仅在您将参数命名为“input”而不是“arr”时才有效,因为在黑客等级平台中传递的参数被命名为 las 'input'。
【解决方案2】:

我找到了答案。我注意到必须将函数参数命名为“输入”而不是“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

【讨论】:

    【解决方案3】:
    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);
    }
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 谢谢,但最好的方法是什么?
      • @claudiobitar '1 2 3 4 5'.split(' ').map(x => parseInt(x))
      【解决方案5】:

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

      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

      【讨论】:

        【解决方案6】:

        使用 .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
        

        【讨论】:

          【解决方案7】:

          试试这个,它适用于所有情况:

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

          【讨论】:

            【解决方案8】:

            另一种解决方案!

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

            【讨论】:

              【解决方案9】:
              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}`);
                  
              

              【讨论】:

              • 请添加您的问题的描述,您在寻找什么?
              【解决方案10】:
              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);
              }
              

              【讨论】:

                【解决方案11】:
                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);
                }
                

                【讨论】:

                  【解决方案12】:

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

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

                  【讨论】:

                    【解决方案13】:

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

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

                    【讨论】:

                      【解决方案14】:

                      我的解决方案:

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

                      【讨论】:

                        【解决方案15】:

                        这是我的解决方案

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

                        【讨论】:

                          【解决方案16】:
                          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}`)
                          }
                          

                          【讨论】:

                          • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
                          猜你喜欢
                          • 2020-06-07
                          • 2022-06-19
                          • 2022-06-19
                          • 2022-08-08
                          • 2017-06-23
                          • 1970-01-01
                          • 1970-01-01
                          • 2017-03-22
                          • 2022-07-24
                          相关资源
                          最近更新 更多