力扣
题目中num的取值是整个int的取值,因此1-n暴力枚举一定是不可以的,但是当我们换一个角度来看这个题的时候,我们会发现,和我们熟悉的一个算法有相同之处。
从一个有序的数组中,找出符合条件的数字,这不就是我们所熟悉的二分查找吗?找到一个平方是num的数,从1开始顺序查找。
class Solution {
public boolean isPerfectSquare(int num) {
int left = 1;
int right = num;
while(right>=left){
int mid = left+(right-left)/2;
int t = num/mid;
if(t==mid){
if(num%mid==0) return true;
left = mid+1;
} else if(t>mid){
left = mid+1;
} else{
right = mid-1;
}
}
return false;
}
}



