• 【Leetcode】69.Sqrt(x)


    Question:

    Implement int sqrt(int x).

    Compute and return the square root of x.

    x is guaranteed to be a non-negative integer.

    Example 1:

    Input: 4
    Output: 2
    

    Example 2:

    Input: 8
    Output: 2
    Explanation: The square root of 8 is 2.82842..., and since we want to return an integer, the decimal part will be truncated.

     Tips:重写sqrt()函数,使其返回一个int类型的平方跟。

    package easy;
    
    /*
     * Implement int sqrt(int x).
    
    Compute and return the square root of x.
     */
    public class L69 {
    	public int mySqrt(int x) {
    //直接调用Math.sqrt,将返回值硬转型为int
    		return (int) StrictMath.sqrt(x);
    	}
    
    	public int mySqrt2(int x) {
    //二分的方式,找到x的平方跟。
    		if (x == 0)
    			return 0;
    		int low = 1;
    		int high = x;
    		while (low <= high) {
    			int mid = low + (high - low) / 2;
    			if (mid == x / mid) {
    				return mid;
    			} else if (mid > x / mid) {
    				high = mid - 1;
    			} else {
    				low = mid + 1;
    			}
    		}
    		return high;
    	}
    
    	public static void main(String[] args) {
    		L69 l69 = new L69();
    		int x = 4;
    		int count = l69.mySqrt(2147395599);
    		System.out.println(count);
    	}
    }
    

    调用Math.sqrt()函数

    public class L69 {
         public int mySqrt(int x) {
                int ans=(int) Math.sqrt(x);
                System.out.println(ans);
                return ans;
            }
         public static void main(String[] args) {
            L69 l69 = new L69();
            int x=4;
            l69.mySqrt(0);
        }
    }

    注:

    ①Math.sqrt() 参数为double类型

    public static double sqrt(double a) {
            return StrictMath.sqrt(a); // default impl. delegates to StrictMath
                                       // Note that hardware sqrt instructions
                                       // frequently can be directly used by JITs
                                       // and should be much faster than doing
                                       // Math.sqrt in software.
        }

    ②StrictMath.sqrt (文档中说 使用StrictMath.sqrt比使用Math.sqrt更快)

     /**
         * Returns the correctly rounded positive square root of a
         * {@code double} value.
         * Special cases:
         * <ul><li>If the argument is NaN or less than zero, then the result
         * is NaN.
         * <li>If the argument is positive infinity, then the result is positive
         * infinity.
         * <li>If the argument is positive zero or negative zero, then the
         * result is the same as the argument.</ul>
         * Otherwise, the result is the {@code double} value closest to
         * the true mathematical square root of the argument value.
         *
         * @param   a   a value.
         * @return  the positive square root of {@code a}.
         */
        public static native double sqrt(double a);

     ③事实证明 Math比StrictMath更快:

      Math----------2ms

     public int mySqrt(int x) {
            return (int) Math.sqrt(x);
        }
    StrictMath---------4ms
     public int mySqrt(int x) {
            return (int)StrictMath.sqrt(x);
        }
     
  • 相关阅读:
    康托(逆)展开(2015.8.6)
    高精度计算(2015.8.1)
    笔记(2015.8.1)
    筛法求素数(2015.7.30)
    欧几里德算法(2015.7.28)
    快速幂取模(2015.7.29)
    同余
    图论相关算法
    笔记(2015-07-24)
    ACM进阶计划
  • 原文地址:https://www.cnblogs.com/yumiaomiao/p/7115059.html
Copyright © 2020-2023  润新知