当我使用n = 64运行此方法时,它给出了x = 64,但它不运行if语句而是运行else语句。实际答案需要为32,但它返回64。
答案 0 :(得分:0)
将测试乘以2乘以直到得到一个不小于目标的数字,然后返回前一个数字
public int largestPowerOf2(int n){
int mul = 1;
int lastWorkingSolution = 0;
while(true){
if(mul >= n)
return lastWorkingSolution;
else{
lastWorkingSolution=mul;
mul*=2;
}
}
}
答案 1 :(得分:0)
这是做同样事情的一种相当简单的方法。只需循环2的幂,直到你达到大于或等于n的那个。然后,只需从电源中减去1即可得到最后一个工作示例并返回该有效值。
private static int largestPowerOf2(int n) {
int power = 1;
int value = (int)Math.pow(2, power);
while (value < n) {
power++;
value = (int)Math.pow(2, power);
}
power--;
return (int)Math.pow(2, power);
}
答案 2 :(得分:0)
这应该有用。
public int largestPowerOf2(int n){
return Integer.highestOneBit(n-1);
}