二分查找 每次判断mid*mid和num 的大小,选择缩小区间
class Solution {
public:
int mySqrt(int x) {
int left = 0;
int right = x;
int ans = -1;
while (left <= right) {
int mid = (left + right) / 2;
if ((long long)mid*mid > x) {
right = mid - 1;
}
else if ((long long)mid*mid <= x) {
left = mid + 1;
ans = mid;
}
}
return ans;
}
};
也是同样的思路:二分查找
class Solution {
public:
bool isPerfectSquare(int num) {
int left = 0;
int right = num;
while (left <= right) {
int mid = (left + right) / 2;
if ((long long)mid*mid > num) {
right = mid - 1;
}else if ((long long)mid*mid < num) {
left = mid + 1;
}
else {
return true;
}
}
return false;
}
};