您的位置:首页 > 其它

LeetCode --- 69. Sqrt(x)

2015-03-19 21:57 483 查看
题目链接: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)

[code] 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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: