lintcode141- Sqrt(x)- easy

Posted jasminemzy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lintcode141- Sqrt(x)- easy相关的知识,希望对你有一定的参考价值。

Implement int sqrt(int x).

Compute and return the square root of x.

Example

sqrt(3) = 1

sqrt(4) = 2

sqrt(5) = 2

sqrt(10) = 3

Challenge 

O(log(x))

 

halfhalf二分法。思想一样,就是取mid后判断的是mid*mid和x的关系。注意用long类型避免乘法溢出。

 

public class Solution {
    /*
     * @param x: An integer
     * @return: The sqrt of x
     */
    public int sqrt(int x) {
        // write your code here
        if (x < 0){
            throw new IllegalArgumentException();
        }
        
        long start = 0;
        long end = x;
        
        while (start + 1 < end){
            long mid = start + (end - start) / 2;
            long mult = mid * mid;
            if (x < mult){
                end = mid;
            } else if (x == mult){
                return (int)mid;
            } else {
                start = mid;
            }
        }
        
        if (end * end == x){
            return (int)end;
        }
        
        return (int)start;
    }
}

 

以上是关于lintcode141- Sqrt(x)- easy的主要内容,如果未能解决你的问题,请参考以下文章

lintcode-easy-Sqrt(x)

lintcode586- Sqrt(x) II- medium

141. Sqrt(x)牛顿迭代法求平方根 by java

LintCode 697. 判断是否为平方数之和

LintCode题解之判断是否为平方数之和

lintcode-medium-Pow(x, n)