网站首页 > 技术文章 正文
给定整数n和m,写一个dispatch,把1~n尽量平均地分成m个组.
示例:
var n = 2;
var m = 2;
dispatch(n, m); // [[1], [2]];
思路:
- 问题转化为将n个小球放到m个框子里边;
- 计算每个框子至少可以放多少个小球: Math.floor(n/m),注意取整;
- 计算剩下多少个小球: left = n % m,剩下的小球放到前left个框子里边;
- 将相关数据填充到框子里边即可.
function dispatch(n, m) {
// 每个框子至少可以放几个球
var least = Math.floor(n/m);
// 剩下多少个球
var left = n % m; // 求余
// 框子
var buckets = [];
var last = 1;
// 依次遍历每个框子,
for (var i = 0; i < m; i++) {
let bucket;
if (left-- > 0) {
bucket = generateArray(last, least + 1);
} else {
bucket = generateArray(last, least);
}
buckets.push(bucket);
last = getMaxOfArray(buckets[i]) + 1; // buckets数组偏移地址往后移动一位
}
return buckets;
}
/**
* 生成数组
* @param base {number} 基址
* @param offset {number} 偏移量
* @return Array
* eg. generateArray(3, 2) => [3, 4]
*/
function generateArray(base, offset) {
var end = base + offset;
var target = [];
for (base; base < end; base++) {
target.push(base);
}
return target;
}
/**
* 获取数组中的最大值
*/
function getMaxOfArray(arr) {
return Math.max.apply(null, arr);
}
dispatch(5, 4);
- 上一篇: JavaScript中计算数组中的最大值/最小值
- 下一篇: ES6 完全使用手册附加案例实战讲解
猜你喜欢
- 2024-11-21 浅析GIF 格式图片的存储与解析
- 2024-11-21 如何用2 KB代码实现3D赛车游戏?2kPlus Jam大赛了解一下
- 2024-11-21 快速了解ES6的代理与反射
- 2024-11-21 「实战」蘑菇街 PC 端首页,瀑布流布局的实现原理与细节技巧
- 2024-11-21 Knative 驾驭篇:带你 '纵横驰骋' Knative 自动扩缩容实现
- 2024-11-21 ECMAScript 6使用教程总结
- 2024-11-21 一道二进制子串算法,让面试官都解不出来?
- 2024-11-21 高级前端进阶,为什么要使用call、apply、bind?
- 2024-11-21 碎片时间学编程「202]:分组数组元素
- 2024-11-21 从入门到入土:Lambda完整学习指南,包教包会(上)
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-