1. 程式人生 > >Leetcode|【69】Sqrt(x) |二分查詢

Leetcode|【69】Sqrt(x) |二分查詢

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); }