69. Sqrt(x)

一、题目

  1、审题

  2、分析

    实现 sqrt(X) 方法,返回的 n 要求是 n*n < x 的最大整数.

 

二、解答

  1、思路:

    方法一、

      采用二分查找法,查找 n。

// Binary Search
    public int mySqrt2(int x) {
        
        if(x == 0)
            return 0;
        int left = 1, right = x / 2;
        while(true) {
            int mid = (left + right) / 2;
            if(mid > x / mid){    // 若用  mid * mid > x 判断,则存在 Integer 范围溢出问题。
                right = mid - 1;
            }
            else {
                if((mid + 1) > x / (mid + 1)) {
                    return mid;
                }
                
                left = mid + 1;
            }
        }
    }

 

  方法二、采用 NewTon 迭代法

public int mySqrt(int x) {
        
        if(x == 1)
            return 1;
        long r = x / 2;
        while(r * r > x)
            r = (r + x/r) / 2; 
        
        return (int) r;
    }

 

posted @ 2018-09-21 14:29  skillking2  阅读(131)  评论(0编辑  收藏  举报