要求:求算术平方根
思路:二分。本题可以理解为找最后一个平方小于等于x的数,即右边界,所以最后返回right,相等直接返回
本题不用考虑找不到返回-1
如果本题不能用long long其实也可以,只要判断mid和x/mid即可
class Solution {
public:
int mySqrt(int x) {
int left=0,right=x;
while(left<=right){
int mid=left+(right-left>>1);
if((long long)mid*mid>x)right=mid-1;
else if((long long)mid*mid<x)left=mid+1;
else return mid;
}
return right;
}
};