如何实现数组非均分时分块:末尾组尺寸最大且不反转结果
实现末尾组尺寸最大的数组分块方案
要实现末尾几组尺寸最大的数组分块,同时保留原数组前部分元素的位置,不需要反转结果,直接通过计算每组的目标大小,再按顺序切割原数组即可。
核心思路
- 计算每组的基础大小:
base = 总元素数 // 组数 - 计算无法均分的剩余元素数:
remainder = 总元素数 % 组数 - 构造分组大小规则:前
组数 - remainder组使用基础大小,后remainder组使用基础大小 + 1(把剩余元素全部分配给最后几组) - 按照这个大小规则,依次从原数组截取对应长度的块,保证元素顺序不变
代码示例(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
相关产品推荐
相关产品推荐

