求助:JavaScript实现两个数组元素均匀分布的函数
实现数组元素的均匀插入并生成指定格式的结果
需要编写一个distribute函数,将数组b的元素均匀插入数组a中,最终输出的数组需符合给定示例的格式。示例如下:
let a = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] let b = [0,0,0,0] function distribute(a, b){ // 需要实现这里的逻辑 return ? } let distributed = distribute(a, b) console.log(distributed) // 期望输出: [0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1] // 注:原示例中的长度判断存在笔误,实际期望应为: // console.log(distributed.length === a.length + b.length)
实现思路
核心是将数组a分割为与b长度相等的段,把b的每个元素依次放在对应段的a元素前,最后拼接所有片段。若a的长度无法被b的长度整除,剩余元素会优先分配到前面的段,保证分布尽可能均匀。
代码实现
function distribute(a, b) { const result = []; const segmentCount = b.length; // 计算每段的基础元素数量 const baseSegmentSize = Math.floor(a.length / segmentCount); // 记录无法均分的剩余元素数量 let remainingElements = a.length % segmentCount; let startIndex = 0; for (let i = 0; i < segmentCount; i++) { // 当前段的实际长度:基础长度 + 若有剩余则多分配1个元素 const currentSegmentSize = baseSegmentSize + (remainingElements > 0 ? 1 : 0); // 插入b的当前元素 result.push(b[i]); // 插入a中对应段的元素 result.push(...a.slice(startIndex, startIndex + currentSegmentSize)); // 更新下一段的起始索引 startIndex += currentSegmentSize; // 剩余元素分配后递减 if (remainingElements > 0) remainingElements--; } return result; }
验证示例
用给定的测试数据运行:
let a = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] let b = [0,0,0,0] let distributed = distribute(a, b) console.log(distributed) // 输出: [0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1] console.log(distributed.length === a.length + b.length) // true
非整除场景处理
如果a的长度无法被b均分,比如a = [1,1,1,1,1,1,1],b = [0,0],函数会将剩余的1个元素分配到第一段,输出结果为[0,1,1,1,1,0,1,1,1],确保插入元素的分布尽可能均匀。
内容的提问来源于stack exchange,提问作者jaap klaas
相关产品推荐
相关产品推荐

