You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HackerRank Mini-Max Sum问题:JS函数求和结果异常排查

问题分析

你的代码存在两个核心问题:

  • 循环缺少终止条件,当skipIndex超过数组长度时,仍会持续执行,导致结果异常甚至无限循环;
  • 通过手动重置i=0控制循环的方式逻辑混乱,容易出现计算遗漏(比如你提到的跳过元素2时的总和13没有被正确收集)。

你输出结果里少了13,就是因为skipIndex=1(跳过元素2)时,循环逻辑没有正确完成总和计算并推入结果数组。

修复方案

我们换一种更直观的思路:遍历数组的每一个索引,计算排除当前索引元素后的数组总和,把所有总和收集起来,最后再取最小和最大值。这种方式逻辑清晰,不容易出错。

修复后的代码如下:

function miniMaxSum(arr) {
    const results = [];
    // 先计算数组所有元素的总总和
    const totalSum = arr.reduce((acc, num) => acc + num, 0);
    // 遍历每个元素,用总总和减去当前元素,得到跳过该元素后的总和
    for (const num of arr) {
        results.push(totalSum - num);
    }
    const minSum = Math.min(...results);
    const maxSum = Math.max(...results);
    console.log(results);
    console.log(minSum, maxSum);
    // 如果需要返回结果可取消下面注释
    // return [minSum, maxSum];
}

console.log(miniMaxSum([1, 2, 3, 4, 5]));
代码解释
  1. 计算总总和:用reduce方法快速算出数组所有元素的总和,这样不用每次重新遍历数组求和,只需要用总总和减去当前元素,就能得到跳过该元素后的4个元素的和,效率更高;
  2. 生成结果数组:遍历数组中的每个元素,每次用总总和减去当前元素,得到的值就是跳过该元素后的总和,将这些值依次推入结果数组;
  3. 获取最小和最大值:用Math.min和Math.max配合扩展运算符...,直接从结果数组中取出最小和最大值。

运行这段代码,结果数组会是[14, 13, 12, 11, 10],完全符合你的预期,同时也避免了原代码中的循环逻辑问题。

原代码问题的具体细节

回到你的原代码,当skipIndex=1时,理论上应该计算1+3+4+5=13并推入数组,但你的循环逻辑在重置i=0后,下一轮循环的skipIndex已经变成2,导致这个值被遗漏。而且当skipIndex达到5(数组长度)时,循环还会继续执行,计算所有元素的总和(15)并推入数组,这会导致结果数组出现多余的错误值。

内容的提问来源于stack exchange,提问作者Kevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 11:02:32