hackerrank - min最大和测试案例失败



我正在做的问题是在hackerrank,我不明白我在这里错过了什么,感觉这应该是工作。

https://www.hackerrank.com/challenges/mini-max-sum/problem?isFullScreen=true

给定5个正整数,求出5个正整数中恰好4个的和所能计算出的最小值和最大值。然后将各自的最小值和最大值打印成一行两个空格分隔的长整数。

测试用例0Arr = [1,2,3,4,5];测试用例1:Arr = [7,69,2,221,8974];

function miniMaxSum(arr) {
var temp = 0;
var mini = 0;
var max = 0;
for (let i = 0; i < arr.length; i++) {
temp += arr[i];
if (i == arr.length - 2) {
mini = temp;
}
}
max = temp - arr[0];
console.log(mini + ' ' + max);
}

测试用例1失败
输出:299 9266
期望输出:299 9271

在问题和测试用例中,它没有说排序数组。你应该在申请之前把它分类。在循环前添加arr = arr.sort((a,b) => a - b)

function miniMaxSum(arr) {
var temp = 0;
var mini = 0;
var max = 0;
arr = arr.sort((a,b) =>  a - b)
for (let i = 0; i < arr.length; i++) {
temp += arr[i];
if (i == arr.length - 2) {
mini = temp;
}
}
max = temp - arr[0];
console.log(mini, max)
}

您假设输入数组总是排序,这是不是为真。

你可以找出最大值和最小值,然后从总数中减去它们。

function miniMaxSum(arr) {
let 
maxNum = arr[0],
minNum = arr[0];
arr.forEach((a) => {
if (a > maxNum) {
maxNum = a;
}
if (a < minNum) {
minNum = a;
}
});
const totalSum = arr.reduce((s, a) => s + a, 0);
console.log(totalSum - maxNum, totalSum - minNum);
}
miniMaxSum([4, 1, 3, 2, 5]);

您也可以对数组进行排序,然后计算最小的n-1值和最大的n-1值,其中n为原始数组的长度。

function miniMaxSum(arr) {
arr.sort((a, b) => a - b);
const minSum = arr.slice(0, arr.length - 1).reduce((s, n) => s + n, 0);
const maxSum = arr.slice(1).reduce((s, n) => s + n, 0);
console.log(minSum, maxSum);
}
miniMaxSum([4, 1, 3, 2, 5]);

这是通过所有测试的解决方案。我希望这对你有帮助。

function miniMaxSum(arr) {
const total = arr.reduce((a,b) => a + b , 0)
const sorted = arr.sort((a,b) => a -b)
const min = arr[0]
const max = arr.reverse()[0]
console.log(total-max, total-min)
}
let arr1 = [1,2,3,4,5]
let arr2 = [-2,56,874,255,32,478965]
console.log(miniMaxSum(arr1))
console.log(miniMaxSum(arr2))

最新更新