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

    Sqrt(x)

    问题:

    Implement int sqrt(int x).

    Compute and return the square root of x.

    思路:

      二分查找

    我的代码:

    public class Solution {
        public int sqrt(int x) {
            if(x <=0 ) return 0;
            int left = 1;
            int right = (int)Math.ceil(((long)x+1)/2);
            int rst = -1;
            long diff = Long.MAX_VALUE;
            while(left <= right)
            {
                int mid = (left + right)/2;
                long tmp = (long)mid*mid;
                if(tmp == x)
                {
                    return mid;
                }
                if(tmp > x) right = mid - 1;
                else
                {
                   left = mid + 1; 
                   if(Math.abs(tmp - x) < diff){
                        rst = mid;
                        diff = Math.abs(tmp - x);
                    }
                }
            }
            return rst;
        }
    }
    View Code

    他人代码:

    public class Solution {
        public int sqrt(int x) {
            if (x == 1 || x == 0) {
                return x;
            }
            
            int left = 1;
            int right = x;
            
            while (left < right - 1) {
                int mid = left + (right - left) / 2;
                int quo = x / mid;
                
                if (quo == mid) {
                    return quo;
                // mid is too big    
                } else if (quo < mid) {
                    right = mid;
                } else {
                    left = mid;
                }
            }
            
            return left;
        }
    }
    View Code

    学习之处:

    • 对于int类型的是,为了考虑到所有的corner case 对于+1 *2 等操作一定要转换成Long 类型再做,要不溢出啦!溢出啦!
    • 抓住一个特点:(int)√x*(int)√x ≤ x 不可能出现在大的那一边的
    • 没有必要跟踪和更新最小值的操作的right节点right会指向趋近点的,其实仔细想一想也就明白了,没想明白就需要多写了好多代码!
    • 这道题刚开始没思路,想了想就有思路了,多想才是王道。
  • 相关阅读:
    xmind 8 readme
    【08】英语词汇速记大全1词根词缀记忆法
    【20180312】2018年03月12日(随想)
    大佬说
    github私有库购买信息
    【01】用构造器创建函数中的小知识
    【01】魔芋使用MDN的一点点经验
    10.12 telnet:远程登录主机
    10.11 arping:发送arp请求
    10.10 traceroute:追踪数据传输路由状况
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4382136.html
Copyright © 2011-2022 走看看