平方根

题目描述:实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 :

输入: 8

输出: 2

说明: 8 的平方根是 2.82842...,由于返回类型是整数,小数部分将被舍去。

代码

二分法:(注意选取右侧的中位数)

public class Solution {

    public int mySqrt(int x) {

        if (x == 0) {

            return 0;

        }

        // 注意:针对特殊测试用例,例如 2147395599

        // 要把搜索的范围设置成长整型

        long left = 1;

        long right = x / 2;

        while (left < right) {

            // 注意:这里一定取右中位数,如果取左中位数,代码会进入死循环

            // long mid = left + (right - left + 1) / 2;

            long mid = (left + right + 1) >>> 1;

            long square = mid * mid;

            if (square > x) {

                right = mid - 1;

            } else {

                left = mid;

            }

        }

        // 因为一定存在,因此无需后处理

        return (int) left;

    }

}

牛顿法:知乎大神

class Solution:

    def mySqrt(self, x):

        if x < 0:

            raise Exception('不能输入负数')

        if x == 0:

            return 0

        # 起始的时候在 1 ,这可以比较随意设置

        cur = 1

        while True:

            pre = cur

            cur = (cur + x / cur) / 2

            if abs(cur - pre) < 1e-6:

                return int(cur)

作者:liweiwei1419

链接:https://leetcode-cn.com/problems/sqrtx/solution/er-fen-cha-zhao-niu-dun-fa-python-dai-ma-by-liweiw/

来源:力扣(LeetCode)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 13,738评论 0 89
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,449评论 0 10
  • 实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结...
    饼干不干阅读 534评论 0 50
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,916评论 0 2
  • 一年四季,我最喜欢的就是秋天,喜欢秋的静美,秋的色彩,轻轻回眸,惟愿时光就在此时搁浅。懂得,聆听,孕育在秋...
    z17沙鸥阅读 728评论 0 2