码迷,mamicode.com
首页 > 其他好文 > 详细

lintcode141- Sqrt(x)- easy

时间:2017-09-26 13:35:28      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:二分法   challenge   return   problem   注意   argument   com   toggle   write   

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

标签:二分法   challenge   return   problem   注意   argument   com   toggle   write   

原文地址:http://www.cnblogs.com/jasminemzy/p/7596241.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!