首页 > 其他 > 详细

【 Sqrt(x) 】cpp

时间:2015-05-29 17:15:16      阅读:205      评论:0      收藏:0      [点我收藏+]

题目:

Implement int sqrt(int x).

Compute and return the square root of x.

代码:

class Solution {
public:
        int mySqrt(int x)
        {
            if (x<2) return x;
            int l = 1;
            int r = x/2;
            while (l<=r)
            {
                int mid = (l+r)/2;
                if ( x / mid < mid )
                {
                    r = mid - 1;
                }
                else if ( x / mid > mid )
                {
                    l = mid + 1;
                }
                else
                {
                    return mid;
                }
            }
            return l-1;
        }
};

tips:

这个题一开始拿到感觉怪怪的,直接看的solution。

直观上认为,只要是bianry search的问题,都应该是最终逼近到一个点上,不能来回震荡;但此题是的二分查找过程确确实实是震荡的。

比如输入400,记录mid的结果如下:

100
50
25
12
18
21
19
20

这种虽然产生了震荡,但是震荡必然越来越小,而且每次变化的长度至少是上一次的一半,时间复杂度也确实是O(logn).

有个细节,如果没有整数的平方数,最后会推出循环;而退出循环时,一定是从l - r = 1,因此取l-1返回即可。

【 Sqrt(x) 】cpp

原文:http://www.cnblogs.com/xbf9xbf/p/4538571.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!