原题:
Implement
int sqrt(int x)
.Compute and return the square root of x, where x is guaranteed to be a non-negative integer.
Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.
Example 1:
Input: 4 Output: 2Example 2:
Input: 8 Output: 2 Explanation: The square root of 8 is 2.82842..., and since the decimal part is truncated, 2 is returned.
一个求平方根的题,基于二分查找,投机取巧用了unsigned long long 来避免溢出int的范围,结果如下:
Success
Runtime: 0 ms, faster than 100.00% of C++ online submissions for Sqrt(x).
Memory Usage: 8.3 MB, less than 99.14% of C++ online submissions for Sqrt(x).
代码:
class Solution {
public:
int mySqrt(int x) {
int l=x,r=0;
unsigned long long m=x/2;
while(l>r){
//cout<<l<<m<<r;
if(m*m==x){return m;}
else if(m*m>x){l=m-1;m=(l+r)/2;continue;}
else if(m*m<x){r=m+1;m=(l+r)/2;continue;}
}
if(m*m>x){return m-1;}
else return m;
}
};
当然也可以按位数降幂的方式(比如六位数->三位的mid)来二分查找,针对大数的时候效率可能高点但是这里没办法对比了毕竟已经0ms了。。。