HackerRank Mini-Max Sum题JavaScript实现求和错误问题排查
HackerRank Mini-Max Sum解题踩坑记录
问题背景
我一直在绞尽脑汁想找出哪里出错了。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,完全不知道自己哪里错了。
有没有人遇到过这个问题,知道是怎么回事吗?
问题更新
不出我所料,是我读题错了。求和之前需要先排序数组。我觉得题目描述写得不好,没有明确说明这点,哈哈。如果有人好奇的话,我最后加了排序逻辑就得到正确值了,代码如下:
function minMax(arr){ 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)
这个版本自然是对不同的数值求和,所以就能得到正确答案了!
内容的提问来源于stack exchange,提问作者Austin L.
相关产品推荐
相关产品推荐

