题解 | #求平方根#

求平方根

http://www.nowcoder.com/practice/09fbfb16140b40499951f55113f2166c

import java.util.*;


public class Solution {
    /**
     * 
     * @param x int整型 
     * @return int整型
     */
    public int sqrt (int x) {
        if(x < 1) return 0 ;
        if(x < 4) return 1 ;
        int half = x / 2 ;//当x >= 4 时 x^(1/2) 一定 <=  x/2 , 因此直接定位到[0-x/2]
        int i = 0 ;
        int j = half ;
        while(i <= j) {//二分查找
            int mid = i + (j - i) / 2 ;
            if(mid == x / mid) {//将条件【mid * mid == x】 转换为 【mid == x/mid】,避免溢出
                return mid ;
            } else if(mid < x / mid) {
                if((mid + 1) > x / (mid + 1)) {
                    return mid ;
                }
                i = mid + 1;
            } else {
                j = mid - 1 ;
            }
        }
        return j ;
    }
}

一个菜鸟的算法刷题记录 文章被收录于专栏

分享一个菜鸟的成长记录

全部评论

相关推荐

头像
11-06 19:52
已编辑
携程_移动安全研发
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务