69-Sqrt(x)

来源:互联网 发布:windows git 环境变量 编辑:程序博客网 时间:2024/06/05 08:30
题目

Implement int sqrt(int x).

Compute and return the square root of x.

分析

这个题里面是有许多陷阱的
- 首先确定用二分法处理这个问题
- 然而0-x之间的num的平方有可能会溢出,所以不要使用num*num,如果使用的话要用long long 存储
- 还有left 不能为0,如果mid 也为零的话,x/mid 就会出错误
- 最后一个比较坑的是近似的问题,见注释。

实现
/*//Author:fancyDate : 2017-03-14Algrithm : 69-Sqrt(x)Time Complexity: 0(lg(n))Method: Binary Search*/class Solution {public:    int mySqrt(int x) {             if (x <= 1)            return x;        int left = 1;        int right = x;        while (left < right)        {            int mid = left + (right - left) / 2;            if (mid == x / mid)                return mid;            else if (mid < x / mid)            {            //比如求sqrt(2)             //1的平方为1,2的平方为4,所以sqrt(2)的结果在1和2 之间            //输出结果应该是1,但如果不加判断的话,就会跳过1,left赋值为2,继续操作。                if(mid+1>x/(mid+1))                    return mid;                left = mid+1;            }            else                right = mid - 1;        }        return right;    }};
原创粉丝点击