思路:对于0~x 之间去找一个整数i,
1.使得i的平方等于 x 或者
2. i的平方 小于x , 但 (i+1)的平方大于x
如果能找到,我们就得到了结果。
最原始的话是用顺序搜索法,从0开始往后搜索,但这种方法太慢了,因为有序,我们懂得二分的方法去找一个数。
每次我们定一个中点 mid , 若此时mid 满足以上两个条件中的一个,即代表我们找到了这个数,直接返回即可。
若当前没找到,我们就要判断 我们要找的数在区间的左边还是在右边。然后相应的去更新左右边界。
#include<iostream>
using namespace std;
class Solution {
public:
int mySqrt(int x) {
int l = 0;
int r = x;
int mid ;
long help1 = 1;
long help2 = 1;
while(l <= r){
mid = l + ((r - l) >> 1);
help1 *= mid;
help1 *= mid;
help2 *= (mid+1);
help2 *= (mid+1);
if(help1 == x){
return mid;
}
if(help1 < x && help2 > x){
return mid;
}else if(help1 < x){
l = mid + 1;
}else{
r = mid - 1;
}
help1 = 1;
help2 = 1;
}
return 0;
}
};
int main(){
return 0;
}