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的数的平方是否小于给定的数,如果是,那么该数为结果。
代码解析
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; //二分前与二分后的中值 } } } } };
时间: 2024-10-08 09:48:17