我正在做的問題是關于hackerrank,我不明白我在這里缺少什么感覺這應該是可行的。
https://www.hackerrank.com/challenges/mini-max-sum/problem?isFullScreen=true
給定五個正整數,找出可以通過將五個整數中的四個恰好相加來計算的最小值和最大值。然后將各自的最小值和最大值列印為單行的兩個空格分隔的長整數。
測驗用例 0:arr = [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
uj5u.com熱心網友回復:
在問題和測驗用例中,它沒有說排序陣列。你應該在放入之前對其進行排序。在你的回圈之前添加這個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)
}
uj5u.com熱心網友回復:
你假設輸入陣列總是排序的,這是不正確的。
您可以找出最大數量和最小數量,然后從總和中減去它們。
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]);
uj5u.com熱心網友回復:
這是通過所有測驗的解決方案。我希望它有所幫助。
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))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/490131.html
標籤:javascript
