LeetCode题解——69. x 的平方根

题目相关

题目链接

LeetCode中国,https://leetcode-cn.com/problems/sqrtx/

题目描述

实现 int sqrt(int x) 函数。

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

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

示例

示例1

输入: 4
输出: 2

示例2

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

题目分析

LeetCode 给出本题难度简单。

题意分析

要求自己写一个开平方的函数,不能使用 sqrt() 函数。因此,本题就是一个浮点数二分查找的模板题。直接套用浮点数二分查找模板即可。

样例数据分析

比较简单,不分析了吧。

题目难点

如何输出正确的结果

使用浮点数二分查找出答案后,如何正确的输出整数部分?

1、输入数据为 4,二分查找出的数据是 1.999999 ,如果直接转换为整数部分,哪么我们将得到数据 1,答案自然是错误的。

2、输入数据为 8,二分查找出的数据是 2.82843,直接转换成整数就可以。

方案很简单,将二分查找出来的 left 加上我们的精度 EPS,然后转换为整数即可。

算法设计

参考浮点数二分查找模板即可。

AC 参考代码

class Solution {
public:
    int mySqrt(int x) {
        //x 是非负整数
        double left = 0;
        double right = x;
        double mid;
        const double EPS = 1e-6;

        //使用 mid 查找
        while (abs(right-left) > EPS) {
            mid = (left+right)/2;
            if (mid*mid<x) {
                left = mid;
            } else {
                right = mid;
            }
        }

        return left+EPS;
    }
};

发布了268 篇原创文章 · 获赞 309 · 访问量 108万+

猜你喜欢

转载自blog.csdn.net/justidle/article/details/105269278