我正在解决这个问题。数学不是一个很强的套件。任何提示将是伟大的。它应该返回一个索引为2的幂的数组。
function secondPower(arr) {
// Return an array containing all indices that are powers of 2
newArray = [];
for(let i = 0; i < arr.length; i++){
if(arr[i] % (2 ** i) === 0 && arr[i] != 1){
newArray.push(arr[i]);
}
}
return newArray;
}
字符串
解决方案的一个示例是
secondPower([1, 2, 3, 4, 5, 6, 7, 8])
型
退货
[2,3,5]
型
8条答案
按热度按时间f0brbegy1#
可以从索引1开始,不断乘以2,直到值达到数组的长度。该解决方案在对数时间内运行,避免了所有索引上的线性循环。
字符串
kgsdhlau2#
起初,我很难理解这是在问什么,但这返回了指数,并为我工作。
字符串
mhd8tkvw3#
使用What is the best way to determine if a given number is a power of two?
字符串
产量
型
sr4lhrrt4#
字符串
jxct1oxe5#
字符串
4jb9z9bj6#
这就是我最终得出的结论,使用Math.pow(x,y)作为loopEnd表达式-其中x是y的幂。
字符串
产量:[ 20,30,50,90,170 ]
rqenqsqc7#
提示:
Math.log2()
静态方法返回一个数字的以2为底的对数。取指数的以2为底的对数,以确定指数是否为2的幂
检查对数的结果是否为整数(无小数部分)。如果结果是整数,则索引是2的幂。因此,如果结果被计算为小数,那么它将为false
注意:因为数组从索引0开始,如果我们执行
Math.log2
,它将导致'-infinity',因此我们可以从索引= 1开始。字符串
6yjfywim8#
你可以使用按位运算符,这是很多更快。但它们只适用于2的幂:
字符串