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

按总数值拆分数组为子块:子块总数值不超过4

数组按总和拆分的实现方案

这个需求其实很常见,核心就是动态累加分组——遍历数组时时刻跟踪当前子块的总和,一旦加上下一个元素就超4,就立刻把当前子块“收尾”,开始新的子块。我给你写个完整的JavaScript实现,完全匹配你要的效果:

实现思路

  • 准备三个核心变量:chunks存最终的子块数组,currentChunk存当前正在构建的子块,currentSum跟踪当前子块的总和(比每次计算数组总和效率高)
  • 遍历原数组的每个元素:
    • 先预判:如果当前子块总和加上当前元素会超过4,就把当前子块放进结果数组,然后用当前元素初始化新的子块
    • 如果没超过,就把当前元素加入当前子块,同步更新总和
  • 遍历结束后,别忘了把最后一个没来得及加入的子块也放进结果数组(循环里只有“超了才放”,最后一个子块不会触发这个条件)

代码示例

const arr = [1, 2, 4, 1, 1, 4, 2, 2, 1, 4];
const chunks = [];
let currentChunk = [];
let currentSum = 0;

for (const num of arr) {
  if (currentSum + num > 4) {
    chunks.push(currentChunk);
    currentChunk = [num];
    currentSum = num;
  } else {
    currentChunk.push(num);
    currentSum += num;
  }
}

// 处理最后一个未收尾的子块
chunks.push(currentChunk);

console.log(chunks);
// 输出结果:[[1,2,1],[4],[1,2,1],[4],[2],[4]]

关键细节说明

  • 效率优化:用currentSum跟踪总和,避免每次调用currentChunk.reduce()计算总和,尤其是数组很大的时候,性能提升明显
  • 边界处理:像单个元素4这种刚好等于4的情况,会自动作为单独子块;如果数组里有多个小数值(比如1),会尽可能打包到一个子块里,直到加下一个就超4为止
  • 元素合法性:假设原数组里的所有元素都≤4(题目示例也是如此),如果有大于4的元素,需要额外处理(比如抛出错误,因为不符合“每个子块总和不超过4”的要求)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:34:59