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

[leetcode]Sqrt(x)

时间:2014-08-08 01:52:45      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   for   ar   div   

Sqrt(x)

Implement int sqrt(int x).

Compute and return the square root of x.

【注意】:

1. 本题int类型可能会溢出,因此不能用乘法运算,应尽量用除法。

2. 绝大多数数字都不是可开方的,该如何得到比较近的结果呢?

算法思路:

思路1:顺序遍历肯定不需要试了,二分查找比较靠谱。二分法在数值计算中非常常见,需要熟练掌握

代码如下:

public class Solution {
    public int sqrt(int x) {
        if(x <= 1) return x == 0 ? 0 : x;
        int l = 1, r = x /2 + 1 ;
        while(l <= r){
            int mid = (l + r) / 2;
            if(mid <= x / mid && (mid + 1) > x / (mid + 1)){
                return mid;//这里用的很巧妙
            }else if(mid > x / mid){
                r = mid - 1;
            }else{
                l = mid + 1;
            }
        }
        return 0;
    }
}

思路2:牛顿迭代法;比较高大上,详细分析过程请戳这里

代码如下:  

 1 public int sqrt(int x) {
 2     if (x == 0) return 0;
 3     double lastY = 0;
 4     double y = 1;
 5     while (y != lastY)
 6     {
 7         lastY = y;
 8         y = (y + x / y) / 2;
 9     }
10     return (int)(y);
11 }

 这道题出的很好

 

[leetcode]Sqrt(x),布布扣,bubuko.com

[leetcode]Sqrt(x)

标签:style   blog   http   color   io   for   ar   div   

原文地址:http://www.cnblogs.com/huntfor/p/3898422.html

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