【LeetCode】69. Sqrt(x) 二分查找实现开平方函数
2016-03-16 21:35
405 查看
题目:
![](http://img.blog.csdn.net/20160316212723444?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
翻译:即给定整数x,实现开平方函数。
思路:
1.任何大于1的整数的开平方一定是大于1、小于x/2+1的,因此可以在[1,x/2+1]区间内使用二分查找来查找这个数。
2.这个题目还有一个关键问题是,若给定x非常大,计算平方时会溢出,因此数据类型应该设置为long long。
题外话:在做这道题的时候,我可以根据x的位数来确定一个更小的搜索空间,但事实证明,在二分查找下,这样并不能节省太多时间。
代码:
翻译:即给定整数x,实现开平方函数。
思路:
1.任何大于1的整数的开平方一定是大于1、小于x/2+1的,因此可以在[1,x/2+1]区间内使用二分查找来查找这个数。
2.这个题目还有一个关键问题是,若给定x非常大,计算平方时会溢出,因此数据类型应该设置为long long。
题外话:在做这道题的时候,我可以根据x的位数来确定一个更小的搜索空间,但事实证明,在二分查找下,这样并不能节省太多时间。
代码:
int mySqrt(int x) { if(x<=0) return 0; if(x==1) return 1; long long low=1; long long high=x/2+1; long long mid=0; while(low<=high) { long long mid=(low+high)/2; if(mid*mid>x) high=mid-1; else if(mid*mid<x) low=mid+1; else return mid; } return (low+high)/2; }
相关文章推荐
- 23种设计模式之形象比喻
- Class.getResource()、ClassLoader.getResource()和this.class.getClassLoader()解析
- SQL不常发生的小问题
- 迟到的总结(五)--springmvc的系统学习之拦截器
- python 之分发包
- 对复利计算器和股票投资的总结
- Yahoo! Hadoop Module 6: Related Topics
- cisco 网络上设备配置NTP
- Yahoo! Hadoop Module 5: Advanced MapReduce Features
- 事件的分发过程
- GDOI模拟 装饰
- display:none和visibility:hidden的区别?
- Android应对进程被杀死--Service(一)
- PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择的问题
- 【前端】【转】网站性能优化准则
- Microsoft Visual Studio 2010 VSTS单元测试指南
- REST Client组件例子,及获取数据api的一些知识
- iOS 开发基础 UIImagePickerController的属性
- python实现一个堡垒机!!!
- ngrok-本地内网端口映射到外网(简单!有效!)