我遇到了一种算法,可以在 O(logN) 时间内判断给定数字是否是完美平方。
这是这个想法的实现(JAVA)。
public boolean isPerfectSquare(long x) {
if (x <= 1)
return true;
long low = 1;
long high = x;
long mid = 0;
while (low <= high) {
mid = low + (high - low) / 2l;
if (mid * mid == x)
return true;
else if (mid * mid < x)
low = mid + 1;
else
high = mid - 1;
}
return false;
}
这适用于像256
,808201
等数字但对于像999966000289
.
我不知道为什么?