前言
谁能想到这题还能用二分做啊,我思路完全以为这是一道数学题。
题目
代码(看解析)
class Solution {
public:
int mySqrt(int x) {
int l = 0, r = x;
int ans = -1;
while(l <= r) { // 一定要保证l == r时才出循环
int mid = l + (r-l)/2; // 防止越界
if((long long)mid * mid <= x) {
l = mid + 1;
ans = mid;
} else {
r = mid - 1;
}
}
return ans;
}
};
代码(9.13 二刷部分看解析)
class Solution {
public:
int mySqrt(int x) {
int i = 1, j = x;
while(i <= j) {
long long mid = (j-i)/2+i;
// cout<<mid<<" ";
if(mid*mid < x) {
i = mid+1;
} else if(mid*mid > x) {
j = mid-1;
} else {
return mid;
}
}
return i-1;
}
};