Given a positive integer num, write a function which returns True if num is a perfect square else False.
Note: Do not use any built-in library function such as sqrt.
Example 1:
Input: 16
Returns: True
Example 2:
Input: 14
Returns: False
注意审题:以前做过是否为2的平方数,我记得解法是如下,直接统计1的个数。
//如果是2的某次方的值,那么肯定二进制中的数字就只有一个,
/*审题错误不一定是二的某次方
* int cou = Integer.bitCount(num);
if (cou==1) {
return true;
}
return false;*/
接下来我的AC答案其实很容易想到:
for (int i = 0; i <= num/2+1; i++) {
if (i*i == num) {
return true;
}
}
return false;
但是速度是相当的慢;Just beats 2.04%
之后看了别人的答案,时间复杂度为logn
public boolean isPerfectSquare(int num) {
int low = 1, high = num;
while (low <= high) {
int mid = (low + high) /2;
if (mid * mid == num) {
return true;
} else if (mid * mid < num) {
low = (int) mid + 1;
} else {
high = (int) mid - 1;
}
}
return false;
}