LeetCode 69 x的平方根

LeetCode 69 x的平方根

问题描述:
  实现 int sqrt(int x) 函数。
  计算并返回 x 的平方根,其中 x 是非负整数。
  由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

执行用时:2 ms, 在所有 Java 提交中击败了63.01%的用户
内存消耗:35.9 MB, 在所有 Java 提交中击败了83.23%的用户

暴力二分:

  1. 对[1,x-1]区间直接采用二分进行暴力搜索
  2. 平方根取到整数位,因此要采用mid、mid+1两个值来与目标值x对比
    • Math.pow(mid, 2)<=x && Math.pow(mid+1, 2)>=x则返回mid、mid+1中的一个
/**
 * @author CodeSPA
 * @date 2020/5/27 - 18:55
 */
class Solution {
    public int mySqrt(int x) {
        if(x<=1) {
            return x;
        }
        //1. 暴力法,直接在[1,x-1]的范围内二分查找寻找
        //结果向下取整
        int left = 1, right = x-1;
        int mid = left + (right-left)/2;
        long curr = 0, next = 0;
        while(left<right) {
            curr = (long)Math.pow(mid, 2);
            next = (long)Math.pow(mid+1, 2);
            if(curr<=x && next>=x) {
                break;
            }
            else if(curr>x) {
                right = mid-1;
            }
            else if(next<x){
                left = mid+1;
            }
            mid = left + (right-left)/2;
        }

        return next==x? mid+1: mid;
    }
}
原文地址:https://www.cnblogs.com/CodeSPA/p/13684790.html