首页 > 解决方案 > 在数组上均匀分布布尔值(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]

问题是,对于如何传播它并没有严格的规则,只是它应该主要以均匀的方式传播(也许有一个规则,即第一个和最后一个元素不会是真的,但不是必需的)。

标签: javascriptarraysalgorithmsortingdistribution

解决方案


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))


推荐阅读