Sqrt(x) - LintCode

5435 ワード

examination questions


Implement int sqrt(int x) .
Compute and return the square root of x.
Example
sqrt(3) = 1
sqrt(4) = 2
sqrt(5) = 2
sqrt(10) = 3
Challenge
O(log(x))

解題コード

class Solution {

public:

    /**

    * @param x: An integer

    * @return: The sqrt of x

    */

    int sqrt(int x) {



        if (x == 1){

            return 1;

        }



        long long int temp = x / 2;

        int deposit;

        while (true){

            if (temp * temp > x){

                deposit = temp;

                temp = temp / 2;

            }

            else{

                if ((temp + 1)*(temp + 1) > x){

                    return temp;

                }

                else{

                    temp = (deposit + temp) / 2;

                }

            }

        }

    }

};

 

アルゴリズム解析


二分法を用いて、1つの要求数を与え、それから半分に分け、その数の二乗が所定の数より大きい場合、その数を平分し、平分後の二乗が所定の数より小さい場合、その数と平分前の数の中数を取って二乗し、毎回二乗後にその数が所定の数より大きい場合、その数の1より小さい数の二乗が所定の数より小さいかどうかを検出し、もしそうであれば、その数は結果である.
 

コード解析

class Solution {

public:

    /**

    * @param x: An integer

    * @return: The sqrt of x

    */

    int sqrt(int x) {



        if (x == 1){ // 1, 

            return 1;

        }



        long long int temp = x / 2; // 

        int deposit; //

        while (true){

            if (temp * temp > x){ // 

                deposit = temp; // 

                temp = temp / 2; // 

            }

            else{

                if ((temp + 1)*(temp + 1) > x){ // +1 x , 

                    return temp;

                }

                else{

                    temp = (deposit + temp) / 2; // 

                }

            }

        }

    }

};