题解 | 求平方根

求平方根

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

import java.util.*;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param x int整型 
     * @return int整型
     */
    public int mysqrt (int x) {
        // x^2 >= 4x在 x >= 4时明显成立
        return binarySearch(x/2,x);        
    }
    public int binarySearch(int arri, int t) {
        // arr 从 1到 arri
        int l = 1, r = arri;
        int closest = -1;
        boolean found = false;

        if (t == 0) return 0;
        else if (t < 4) return 1;

        while (l <= r) {
            int mid = l + ((r - l) >> 1);//向下取整
            if ((long) mid * mid == t) {
                found = true;
                closest = mid;
                r = mid - 1;
            } else if ((long) mid * mid < t) {
                if(!found)
                    closest = mid;// 没找到才记录
                l = mid + 1;
            } else {
                r = mid - 1;
            }
        }
        // 如果找到x,返回左边界;否则返回比目标值小的最近的更小值,如果没有则返回-1
        return closest;
    }
}

全部评论
这个算是二分的基础模版的集成了
点赞 回复 分享
发布于 03-28 12:17 广东

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务