第69题:x的平方根

一. 问题描述

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入: 4

输出: 2

示例 2:

输入: 8

输出: 2

说明: 8 的平方根是 2.82842...,

     由于返回类型是整数,小数部分将被舍去。

二. 解题思路

本题主要采用二分查找来查找x的平方根m。这道题是比较简单的,但是要注意在进行二分查找时,对其初始值要有所限定,其最大值不能大于int类型的最大值2147483647。

步骤一:设置二分查找法的起点visit_first和终点visit_second。

步骤二:利用二分查找法进行查找(原理就不说了),其中最大值的限制条件要注意。

三. 执行结果

执行用时 :2 ms, 在所有 java 提交中击败了93.59%的用户

内存消耗 :33.7 MB, 在所有 java 提交中击败了75.11%的用户

四. Java代码

class Solution {
    public int mySqrt(int x) {
        int visit_first=0;
            int visit_second=((x)/2)+1;
            if(x>=Integer.MAX_VALUE||visit_second>Math.sqrt(2147483647))
            {
             visit_second=(int)Math.sqrt(2147483647);
            }
            while(true)
            {
            int    m=(visit_second+visit_first)/2;
                if((m*m)==x||((m*m)<x&&(m+1)>(int)Math.sqrt(2147483647)))
                {
                    return m;
                }
                if((m*m)>x&&(m-1)*(m-1)<x)
                {
                    return m-1;
                }
                if((m*m)<x)
                {
                    visit_first=m+1;
                    
                }
                else
                {
                    visit_second=m-1;
                }
     
            }
    }
}
原文地址:https://www.cnblogs.com/xiaobaidashu/p/11676218.html