请使用JavaScript写一段将一个列表数据分桶的函数入参是列表a、分桶数k返回值是两个列表
——分别为k个桶内的数据和未被分到桶内的数据。具体要求如下:
-
将列表a中的数据分成k个桶,桶的编号从0到k-1。
-
如果列表a中的数据量不足k个,则只分配前面的桶,后面的桶为空。
-
每个桶内的数据应该尽量平均分布,即每个桶内的数据量差异不应超过1。
-
返回值为一个包含两个列表的数组,第一个列表包含分到桶内的数据,第二个列表包含未被分到桶内的数据。
下面是函数的实现:
function bucketize(a, k) { var bucketSize = Math.ceil(a.length / k); // 每个桶的大小 var buckets = []; // 存储分到桶内的数据 var unassigned = []; // 存储未被分到桶内的数据 for (var i = 0; i < k; i++) { buckets.push([]); // 初始化桶 } for (var i = 0; i < a.length; i++) { var bucketIndex = Math.floor(i / bucketSize); // 计算数据所属的桶编号 if (bucketIndex < k) { buckets[bucketIndex].push(a[i]); // 将数据添加到对应的桶中 } else { unassigned.push(a[i]); // 如果桶编号超过k,则将数据放入未被分到桶内的列表中 } } return [buckets, unassigned]; }
// 示例: var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; var k = 3; console.log(bucketize(a, k)); // [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10], [11]]
原文地址: https://www.cveoy.top/t/topic/b5Xv 著作权归作者所有。请勿转载和采集!