【发布时间】:2022-06-19 20:22:57
【问题描述】:
我一直在努力找出自己做错了什么。在 HackerRank 问题中,Mini-Max Sum 的问题是求 5 个数字组成的数组的一部分的总和。在他们给你的例子中,他们告诉你arr = [1,2,3,4,5],最小和是1+2+3+4 = 10,最大和是2+3+4+5 = 14
我还是新手,所以解决问题有时对我来说仍然是一个挑战。我想出了这个作为我的第一个解决方案:
function minMax(arr){
console.log(arr, 'this is our arr')
var baseSum = 0
var minSum = 0
var maxSum = 0
var i = null
for(i=1;i<4;i++){
baseSum += arr[i]
}
console.log(baseSum, 'this is baseSum')
console.log(minSum = baseSum + arr[0], maxSum = baseSum + arr[4])
}
const numArr = [7, 69, 2, 221, 8974]
minMax(numArr)
我的想法是我可以抓取两个变量之间一致的数字,抓取数组的第一个和最后一个数字并将它们相加得到结果。它通过了一项测试,但在numArr 列出的值处失败,如果我将最后 4 个数字相加,我得到 9266,但预期值为 9271。
我花了一些时间想办法重构它,我知道一开始并不好,但我正在努力!
我想出了这个-
function minMax(arr){
if (arr.length > 5){
return "Too long"
}
var minArr = arr.slice(0,4)
var maxArr = arr.slice(1,5)
minSum = 0
maxSum = 0
for (i=0; i < minArr.length;i++){
minSum += minArr[i]
}
for (x=0; x < maxArr.length; x++){
maxSum += maxArr[x]
}
console.log(minSum, maxSum)
}
但它返回的内容与以前完全相同。所以我要么不理解这个问题(可能正在发生什么),要么他们的期望值的总和是错误的。我什至只是抓起一个计算器,得到 9266,所以我不明白我做错了什么。
有没有人遇到过这种情况,他们有什么想法吗?
更新
我自己并不感到惊讶,我读错了问题。您应该在得到总和之前对实际数组进行排序。他们并没有在问题中真正说明,所以它的措辞很糟糕 imo 哈哈,但这最终是我所做的一切,以获取正确的值,以防有人想知道。
if (arr.length > 5){
return "Too long"
}
arr.sort(function(a, b) {
return a - b;
});
var minArr = arr.slice(0,4)
var maxArr = arr.slice(1,5)
var minSum = 0
var maxSum = 0
var i = null
for (i=0;i<minArr.length;i++){
minSum += minArr[i]
}
for (i=0;i<maxArr.length;i++){
maxSum += maxArr[i]
}
console.log(minSum, maxSum)
}
const numArr = [7, 69, 2, 221, 8974]
minMax(numArr)
这显然总结了不同的值,所以你会得到正确的答案!
【问题讨论】:
-
我会考虑首先对数组从最高到最低进行排序,反之亦然 - 然后你就可以轻松地抓取(就像你对
slice所做的那样)只是最高或最低 X 数量值并将它们相加 -
你试图解决这个问题,就好像输入数组总是排序的,显然情况并非如此。这就是你的困惑的来源。
-
是的,我的困惑是我认为我不需要以任何方式改变数组,我只取数组中 5 个数字的总和 - 前 4 和最后 4。但是事实并非如此,我阅读了这个问题,但他们并没有很好地解释它,哈哈。我按照@decpk 的建议对数组进行了更改,这给了我正确的值。
标签: javascript arrays