javascript - 在数组上均匀分布布尔值(Javascript)
问题描述
我有一个固定长度的布尔数组。值默认为false
。
我需要用 N 个值填充数组,true
这些值大多均匀分布并分布在数组上。
例如:如果长度为 7,N 为 3,它看起来像这样:
[false, true, false, true, false, true, false]
如果长度为 14,N 为 5,它看起来像这样:
[false, false, true, false, false, true, false, false, true, false, true, false, true, false]
问题是,对于如何传播它并没有严格的规则,只是它应该主要以均匀的方式传播(也许有一个规则,即第一个和最后一个元素不会是真的,但不是必需的)。
解决方案
function createBoolArray(len, trues) {
const arr = new Array(len).fill(false);
let leftTrues = trues;
let left = len;
let divisor = 0;
for(let i = 0; i < len && leftTrues > 0;) {
left = len - i;
divisor = Math.floor(left / leftTrues);
if(Math.floor(left / divisor) > leftTrues) {
i = i + divisor + 1;
arr[i - 1] = true;
} else {
i = i + divisor;
arr[i - 1] = true;
}
leftTrues--;
}
return arr;
}
console.log(createBoolArray(14, 5))
推荐阅读
- c++ - 如果继承不是公开的而不是出错,为什么 enable_shared_from_this 会崩溃
- android - 设置 DatePickerDialog 最小值和最大值
- python - 无法提取和合并共享公共列的两个数据集
- android - 如何重置片段内的参数
- sql - 滞后函数跳过以前有空的记录
- flutter - 给定 ChangeNotifier 中的状态更改,更改 TabView 中的选定选项卡
- swiftui - 如何隐藏 SwiftUI 列表分隔符
- common-lisp - Lisp %var 命名约定
- javascript - 为什么我在突变处理程序中发生突变“突变处理程序之外的 Vuex 存储状态”的错误?
- java - 应用程序/项目的 Windows 任务管理器 CPU“正常运行时间计算机”时间?