方法:二分查找 本题是二分查找算法的典型应用场景:查找一个有确定范围的整数,可以根据 单调性 逐渐缩小搜索范围; 单调性:注意到题目中给出的「例 2」,8 的平方根返回 2,不可以返回 3。因此:如果一个数 a 的平方大于 x ,那么 a 一定不是 x 的平方根,下一轮需要在区间 [0..a - 1] 里继续查找 x 的平方根。



public class Solution {
    /**
     * 
     * @param x int整型 
     * @return int整型
     */
    public int mysqrt (int x) {
        // write code here
        if(x == 0){
            return 0;
        }
        if(x == 1){
            return 1;
        }
        int left =1;
        int right = x/2;
        while(left<right){
            int mid = left + (right - left+1)/2;
            if(mid>x/mid){
                right = mid -1;
            }else{
                left = mid;
            }
        }
        return left;
    }
}