javascript - 确定 2 的幂?

标签 javascript jquery arrays algorithm math

我正在创建一个简单的括号系统,我需要一种方法来检查是否有正确数量的团队,或者我的程序是否需要补偿轮空。

现在,我正在使用此函数检查“2 的幂”:

function validBracket(data) {
    var x = data.teams.length;
    return ((x != 0) && !(x & (x - 1)));
}

这非常有效,但我需要知道要添加多少轮再见。 例如,如果我有 16 个团队,我就不需要再添加团队了。但是,如果我有 12 个团队,我需要前 4 个团队 才能轮空。

如何计算要添加到我的括号中的轮空轮数?对 2 的幂的数组进行硬编码会更好吗?

在伪代码中,我想到的是这样的:

if(validateBracket(data)) {
    // Valid number of teams (power of two). Keep going.
} else {
    var byeRounds = calculateByeRounds();
}

注意:我不想像下面这样使用二的幂数组:

var powersOfTwo = [2,4,8,16,32,...];

这背后的原因是我会限制可以放入系统中的团队数量(但是,我认为一个人不会拥有超过 256 个团队)。

最佳答案

var needed = (1 << Math.ceil(Math.log2(n))) - n;

针对极端情况的更通用的解决方案:

var needed = Math.pow(2, Math.ceil(Math.log2(n))) - n;

关于javascript - 确定 2 的幂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30825484/

相关文章:

java - 检索Java中的内部元素

在c中比较2d字符数组与1d字符数组

javascript - Ajax 发布未捕获的语法错误 : Unexpected token ILLEGAL

javascript - 在 codeigniter 中使用 ajax 添加到购物车

javascript - 在网站上使用 JavaScript 提供图像

javascript - 使用箭头键/jQuery 浏览多个列表?

python - 有没有一种优雅的方法来检查数组中的哪些元素位于另一个容器中?

javascript - 如何在呈现数据时突出显示搜索输入?

javascript - 带有逻辑运算符的复杂三元运算符

javascript - 页面加载后显示 div 2 秒