zoukankan      html  css  js  c++  java
  • Sqrt(int x) leetcode java

    Reference: http://blog.csdn.net/lbyxiafei/article/details/9375735

     题目

    Implement int sqrt(int x).

    Compute and return the square root of x.

    题解

    这道题很巧妙的运用了二分查找法的特性,有序,查找pos(在这道题中pos=value),找到返回pos,找不到返回邻近值。

    因为是求数x(x>=0) 的平方根, 因此,结果一定是小于等于x且大于等于0,所以用二分查找法肯定能搜到结果。

    以每一次的mid的平方来与target既数x相比:

    如果mid*mid == x,返回mid;

    如果mid*mid < x,那么说明mid过小,应让low = mid+1,在右边继续查找

    如果mid*mid > x,那么说明mid过大,应让high = mid-1,在左边继续查找


    若x无法开整数根号(在上述查找中没有找到),那么我们仍然可以利用之前对二分查找法总结的技巧,当target值不在数组中,low指向大于target的那个值,high指向小于target的那个值,由于我们需要向下取整的结果,所以我们返回high指向的值(这里high指向的值和high的值是同一个值),这个值就是所求得最接近起开根号结果的整数值。

    因为leetcode的test case x=2147395599,在算mid*mid的时候造成溢出,所以mid不能使用int型来接,要使用long型防止溢出(Java中Integer型的范围:-2147483648 到2147483648)

     代码为:

     1 public int sqrt(int x) {
     2         int low = 0;
     3         int high = x;
     4         while(low<=high){
     5             long mid = (long)(low + high)/2;
     6             if(mid*mid < x)
     7                 low = (int)mid + 1;
     8             else if(mid*mid > x)
     9                 high = (int)mid - 1;
    10             else
    11                 return (int)mid;
    12         }
    13         return high;
    14     }
  • 相关阅读:
    Jquery easyui中的有效性检查
    当执行批量删除时
    nested exception is com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1044 > 1024
    java的四种取整方法
    springmvc乱码解决
    跨域
    垂直居中
    js判断数组
    安装 node-sass 的正确姿势
    js判断qq浏览器
  • 原文地址:https://www.cnblogs.com/springfor/p/3857772.html
Copyright © 2011-2022 走看看