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

如何实现数组非均分时分块:末尾组尺寸最大且不反转结果

实现末尾组尺寸最大的数组分块方案

要实现末尾几组尺寸最大的数组分块,同时保留原数组前部分元素的位置,不需要反转结果,直接通过计算每组的目标大小,再按顺序切割原数组即可。

核心思路

  1. 计算每组的基础大小:base = 总元素数 // 组数
  2. 计算无法均分的剩余元素数:remainder = 总元素数 % 组数
  3. 构造分组大小规则:前 组数 - remainder 组使用基础大小,后 remainder 组使用 基础大小 + 1(把剩余元素全部分配给最后几组)
  4. 按照这个大小规则,依次从原数组截取对应长度的块,保证元素顺序不变

代码示例(JavaScript)

function partitionEndLargest(arr, groupCount) {
  const total = arr.length;
  const baseSize = Math.floor(total / groupCount);
  const extra = total % groupCount;
  
  // 生成每组的目标大小:前(groupCount - extra)组是baseSize,后extra组是baseSize+1
  const groupSizes = Array(groupCount - extra).fill(baseSize)
    .concat(Array(extra).fill(baseSize + 1));
  
  const result = [];
  let currentStart = 0;
  
  for (const size of groupSizes) {
    result.push(arr.slice(currentStart, currentStart + size));
    currentStart += size;
  }
  
  return result;
}

// 测试:53个元素分成10组
const teams = Array.from({length: 53}, (_, i) => `Team ${i+1}`);
const groupedTeams = partitionEndLargest(teams, 10);

// 查看每组大小
groupedTeams.forEach((group, idx) => {
  console.log(`第${idx+1}组:${group.length}个元素`);
});
// 输出:前7组都是5,后3组都是6,且Team 1-Team 5在第1组,Team 6-Team10在第2组...最后3组各6个

为什么这个方法有效

  • 直接根据需求规划每组的大小,不需要依赖反转操作,完美保留原数组的元素顺序,确保特定元素(比如种子球队)始终处于前几组中
  • 计算逻辑清晰,适用于任何总元素数和组数的组合,无论是否能均分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:07:15