科技看点|C++题解系列-068 x 的平方根,leetcode
【科技看点|C++题解系列-068 x 的平方根,leetcode】但这种类似穷举的方式显然很不智 , 既然是查找能碰对的数 , 肯定二分搜索要快一些 。 如先看5*5==25,25>10,范围向左缩小 , 并继续中分 , 有3*3==9 , 9<10 , 范围向右缩小 , 并继续中分 , 有4*4==16,16>10,right==3,left==4.结束 。
那结果应该取哪一次的middle呢?显然因为咱们是integer的运算 , 取小不取大 , 3可以是结果 , 4决计不是 。 故有:
if(mid<=x/mid)ret=mid;整个程序非常简单 , 而且高效AC:
intl=1,r=x,ret=0;while(l<=r){intm=(l+r)>>1;if(m<=x/m){l=m+1;ret=m;}elser=m-1;}returnret;这道题算是告一段落 , 但我们其实占了integer的便宜 , 假使要实现的是floatsqrtf(floatx),我们可能需要考虑一下使用著名的牛顿迭代了 。 这就基本演变为一道数学题了 。 具体可见Matrix67这篇博文中的解释 。
#include#includefloatsqrtf(floatx){floatret;for(floatf=1.f;true;f=ret){ret=(f+x/f)/2;if(std::abs(f-ret)<FLT_MIN)break;}returnret;}
推荐阅读
- 小红猪带你看科技|七夕节送女朋友必备左点小艾智能艾灸器X8,3天众筹500万
- 浪浪科技精选|超频三GI-CX240 ARGB水冷,极致性能冷酷到底
- ITheat热点科技|可搭载高规格显卡,AMD将发布新移动端处理器:开放完整PCIe通道
- 爱因儿科技|入侵盖茨、马斯克、巴菲特等名人推特账号的黑客被抓了!最小的17岁
- 小米科技|小米正式官宣以旧换新,支持小米10系列等5款机型,你等到了吗?
- 小米科技|数亿米粉始料未及!小米2日正式宣布,网友:太良心了!
- 科技数码迷|刘作虎终于拿起了屠刀,一加氢OS彻底与过去说再见
- 一点科技范|你更pick谁?,下半年最受期待的三大系列手机
- 科技章鱼烧|更换硬盘只需动动小手,装载系统和软件交给DiscWizard
- 科技小蠕虫|又一国家绕开华为,3大运营商核心网络不用华为,美国“围剿”下