题目链接:Sqrt(x)
Implement int sqrt(int x).
Compute and return the square root of x.
这道题的要求是实现int sqrt(int x),即计算x的平方根。
考虑二分,即先令l和r分别为1和x/2+1(x的平方根一定小于等于x/2+1),然后m等于(l+r)/2,不断比较m*m和x的大小。
由于m*m的时候,可能溢出,因此可以用除法代替乘法,或者采用long long类型。
时间复杂度:O(logn)
空间复杂度:O(1)
1 class Solution{
2 public:
3 int sqrt(int x)
4 {
5 if(x == 0)
6 return 0;
7
8 int l = 1, r = x / 2 + 1;
9 while(l <= r)
10 {
11 int m = (l + r) / 2;
12
13 if(m <= x / m && m + 1 > x / (m + 1))
14 return m;
15
16 if(m > x / m)
17 r = m - 1;
18 else if(m < x / m)
19 l = m + 1;
20 }
21 return l;
22 }
23 };
转载请说明出处:LeetCode --- 69. Sqrt(x)
原文地址:http://blog.csdn.net/makuiyu/article/details/44465795