本篇给出了几道关于快速求解的小问题。
Fast Power
Fast Power 为快速求a^n % b=?。
public int fastPower(int a, int b, int n) {
if (n == 1) {
return a % b;
}
if (n == 0) {
return 1 % b;
}
long product = fastPower(a, b, n / 2);
product = (product * product) % b;
if (n % 2 == 1) {
product = (product * a) % b;
}
return (int) product;
}
o1 check power of 2
这道题为用O(1)的时间快速检测一个数是否是2的幂。很简单2的幂与其本身减一必然相与为0,举几个例子就知道了。
public boolean checkPowerOf2(int n) {
if (n <= 0) {
return false;
}
return (n & (n-1)) == 0;
}
Sqrt(x)
按题意,就知道是求一个数的平方根,我们使用二分查找将答案看成是要查找从1到n的范围即可。
public int sqrt(int x) {
// find the last number which square of it <= x
long start = 1, end = x;