Java 请帮我优化我的代码以解决codechef问题!
我正在解决这个问题!这是一个简单的问题,但我的时间到了!看来效率还不够!请帮我优化一下 代码如下:Java 请帮我优化我的代码以解决codechef问题!,java,optimization,Java,Optimization,我正在解决这个问题!这是一个简单的问题,但我的时间到了!看来效率还不够!请帮我优化一下 代码如下: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
for (int i = 0; i < t; i++) {
System.out.println((int) (Math.pow(2, (int) ((Math.log(Integer.parseInt(br.readLine()))) / (Math.log(2))))));
}
}
}
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
公共班机{
公共静态void main(字符串[]args)引发IOException{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
int t=Integer.parseInt(br.readLine());
for(int i=0;i
问候
沙恩沙
log(2)
,而不是在每个周期计算它Math.log
,因为您使用的是整数,所以可以通过使用Integer.numberOfLeadingZeros
(请参阅),计算log2(x))=32-numberOfLeadingZeros(x-1)
numberOfLeadingZeros
应该非常快,因为它只执行一些位级操作来执行其工作
log(2)
,而不是在每个周期计算它Math.log
,因为您使用的是整数,所以可以通过使用Integer.numberOfLeadingZeros
(请参阅),计算log2(x))=32-numberOfLeadingZeros(x-1)
numberOfLeadingZeros
应该非常快,因为它只需执行一些位级操作即可执行其工作。这是一场竞赛,您需要帮助吗??如果解决方案不是你提出的,你怎么能为自己感到骄傲
无论如何,这里有一些提示:
[编辑]我以前关于数学的解决方案。Pow错了,谢谢Andrea这是一场比赛,你需要帮助吗??如果解决方案不是你提出的,你怎么能为自己感到骄傲 无论如何,这里有一些提示:
[编辑]我之前关于数学的解决方案。Pow是错误的,谢谢Andrea这是为了找到下一个更低的2次方吗?有比调用任何日志函数更快的方法,例如各种位技巧。通常在2的补码表示中,正
x
的下一次2次幂与x
相同,只有x
的最高有效位集,所有其他位为零
编辑:既然你已经确认你正在寻找下一个更低的2次方,下面是规范(无分支)位黑客:
/** The largest power of 2 <= x.
Only valid for positive numbers. */
static int nextLowerPowerOf2(int x) {
x >>>= 1;
x |= x >> 1;
x |= x >> 2;
x |= x >> 4;
x |= x >> 8;
x |= x >> 16;
x++;
return x;
}
/**2的最大功率>>=1;
x |=x>>1;
x |=x>>2;
x |=x>>4;
x |=x>>8;
x |=x>>16;
x++;
返回x;
}
这是为了找到下一个更低的2次方吗?有比调用任何日志函数更快的方法,例如各种位技巧。通常在2的补码表示中,正x
的下一次2次幂与x
相同,只有x
的最高有效位集,所有其他位为零
编辑:既然你已经确认你正在寻找下一个更低的2次方,下面是规范(无分支)位黑客:
/** The largest power of 2 <= x.
Only valid for positive numbers. */
static int nextLowerPowerOf2(int x) {
x >>>= 1;
x |= x >> 1;
x |= x >> 2;
x |= x >> 4;
x |= x >> 8;
x |= x >> 16;
x++;
return x;
}
/**2的最大功率>>=1;
x |=x>>1;
x |=x>>2;
x |=x>>4;
x |=x>>8;
x |=x>>16;
x++;
返回x;
}
Math.Pow(2,(a/b))!=数学能力((a/b),2)。在任何情况下,都只能预先计算分母,因为必须对分子进行评估。@JPelletier..这不是一场竞赛…这些都是在网站上练习的问题,以磨练我的技能,我是一名新手…@Shahensha好的,我对“竞赛”宣传感到困惑!我不知道codechefMath.Pow(2,(a/b))!=数学能力((a/b),2)。在任何情况下,都只能预先计算分母,因为必须对分子进行评估。@JPelletier..这不是一场竞赛…这些都是在网站上练习的问题,以磨练我的技能,我是一名新手…@Shahensha好的,我对“竞赛”宣传感到困惑!我不知道codechef@Shahensha,编辑为下一个更低的2次方添加位破解。@Shahensha,编辑为下一个更低的2次方添加位破解。