Leetcode|【69】Sqrt(x) |二分查詢
阿新 • • 發佈:2018-11-14
Implement int sqrt(int x).
Compute and return the square root of x.
題目型別:perfect square
解法有兩種:
1)第一種是二分查詢,注意邊界上限可以從x/2+1開始查詢。
2)第二種方法是牛頓迭代法
解法1:二分查詢
int sqrt(int n){//二分查詢,8ms
int res=n/2+1;
int x=0;
while(x<=res){
int mid=(x+res)/2;
long long sq=(long long)mid*(long long)mid;
if (sq==n) return mid;
else if(sq<n) x=mid+1;
else res=mid-1;
}
return res;
}
上面的解法可讀性較差,解釋下:
a)為什麼從x/2+1查詢,(x/2+1)^2 > x 這個是可以證明的。
b)
解法2:
int mySqrt(int x) {//牛頓迭代法 12ms
if(x<=0) return 0;
double res=1;
double last=0;
for(;last!=res;last=res,res=(res+x/res)/2 );
return int(res);
}