码迷,mamicode.com
首页 > 其他好文 > 详细

Sqrt(x) -- leetcode

时间:2015-04-08 15:03:08      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:leetcode   square   二分法   

Implement int sqrt(int x).

Compute and return the square root of x.


此代码在leetcode上实际执行时间为16ms。

基本思路为二分法。

由于二段式二分法,退出循环时,有两种情况,一是精确匹配,二是精确值不存在情况下,指向稍大一点的。故函数返回时需要判断一下。

另外一点需要注意的是,作判断时,不能用 mid * mid < x, 而是要写成  mid < x / mid。 因为剩法会溢出,而除法不会溢出。



class Solution {
public:
    int sqrt(int x) {
        if (!x) return x;
        
        int l = 1, h = x;
        while (l < h) {
            const int mid = l + (h - l) / 2;
            if (mid < x / mid)
                l = mid + 1;
            else
                h = mid;
        }
        
        return l == x / l ? l : l - 1;
    }
};


Sqrt(x) -- leetcode

标签:leetcode   square   二分法   

原文地址:http://blog.csdn.net/elton_xiao/article/details/44940387

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!