讨论/面试考题/被面试问到的一道题/
被面试问到的一道题

手写 sqrt(x)sqrt(x),与力扣上不同的是,xx 没有限制范围,也就是 xx 可以为负数,也可以在 010-1 之间。要求精度 1e51e-5
对于正整数的开方可以用二分法,
我处理在 010-1 之间的方法是扩大 100100 倍,再用开方的结果除以 1010,但感觉这个方法非常蠢。。。
求问大佬们有没有更好的方法。。。

展开讨论
共 8 个讨论

二分的初始范围取最大(INT_MIN,INT_MAX)

1

参考一下安徽省 2014 年理科高考题第 21 题。

设实数 c>0c>0 ,整数 p>1p>1nNn\in\mathbb{N}^\star

(1) 证明:当 x>1x>-1 ,且 x0x\neq0 时,(1+x)p>1+px\left(1+x\right)^p>1+px

(2) 数列 {an}\left\{a_n\right\} 满足 a1>c1pa_1>c^\frac{1}{p}an+1=p1pan+cpan1pa_{n+1}=\frac{p-1}{p}a_n+\frac{c}{p}a_n^{1-p} ,求证:an>an+1>c1pa_n>a_{n+1}>c^\frac{1}{p}

这道面试题就是 p=2 的情况罢了。而且这个算法收敛也是很快的。

数学里面有一个幂级数,可以了解下

牛顿迭代法?

小数也可以使用二分法吧, while(r - l > 1e-5){...}

魔法数字

大概是这样。

#include <iostream>

using namespace std;

const double eps = 1e-8;

double n;

int main() {
    scanf("%lf", &n);
    
    double l = -1e9, r = 1e9;
    while (r - l > eps) {
        double mid = (l + r) / 2;
        if (mid * mid >= n) r = mid;
        else l = mid;
    }
    printf("%lf", l);
    
    return 0;
}

一手面试资料(问法,风格,面试题目方向),面试流程(可以推动,push),HR面试雷区避免

1、互联网BAT TMD技术岗招聘;{微信同手机17341407661}

2、招聘JAVA岗位(互联网分布式系统架构设计、多线程、高并发、高可用、高扩展、JVM虚拟机、分布式缓存中间件、源码);

3、招聘大数据(hadoop、spark、Python、BI、ETL、离时、实时、SQL数据治理);

4、算法(搜索、推荐、数据挖掘、NLP自然语言、文本挖掘、知识图谱、深度学习、机器学习、视觉算法);

5、其他技术栈如C、C++、PHP、测试开发、前端、云计算;