在使用二分法完成题目时,使用如下条件判断时
if(mid < num/mid)
当输入 num = 5,当二分查找到 mid = 2时, 出现了mid = num/mid的情况,暴露出了这种判断条件的缺陷。
class Solution {
public:
bool isPerfectSquare(int num) {
int left = 1;
int right = num;
if(num == 0){
return true;
}
while(left <= right){
long mid = left + (right - left)/2;
if(mid * mid < num){
left = mid + 1;
}else if(mid * mid > num){
right = mid -1;
}else {
return true;
}
}
return false;
}
};