LeetCode 第 69 题 (Sqrt(x))
2016-04-23 18:02
190 查看
LeetCode 第 69 题 (Sqrt(x))
Implement int sqrt(int x).
Compute and return the square root of x.
求 x 的平方根。我们知道 是单调增函数, 。所以可以用二分查找法来计算。
int mySqrt(int x) { if(x <= 0) return 0; int a1 = 1; int a2 = 46341 * 2 - 1; unsigned int a, y; if(a2 > x / 2) a2 = x; do { a = (a1 + a2) / 2; y = a * a; if(y == x) return a; if(y > x) { a2 = a; } else { a1 = a; } }while(a1 + 1 < a2); a = (a1 + a2) / 2; return a; }
这个程序比较讲究的地方是 a2 = 46341 * 2 - 1 。之所以这么去是为了使第一次循环时 a = (a1 + a2) / 2 = 46341。
46341 是个比较特殊的数, 大于 INT_MAX 的最小的整数的平方数。这样可以保证这个二分查找法能覆盖所有整数范围,并且保证循环次数是最少的。
相关文章推荐
- 杭电5672
- Java中的多线程
- 专题二1003
- java毕向东听课笔记23(集合框架-List集合具体对象)
- LeetCode 第 69 题 (Sqrt(x))
- java类加载机制的代码实例
- C++中的explicit关键字(转)
- CodeForces - 417A(思维题)
- Nginx压力测试工具之WebBench
- [Toddler's Bottle]-collision
- update-alternatives命令
- follow 开源项目关于NoClassDefFoundError错误的解决方法
- 19.fastDFS集群理解+搭建笔记
- 夺命雷公狗ThinkPHP项目之----企业网站8之栏目的添加完善(无限极分类的完成)
- CodeForces - 416A (判断大于小于等于 模拟题)
- opencv 图像的深度和通道
- 14_1到1000之间的完全数
- GIT 分支管理:创建与合并分支、解决合并冲突
- Codeforces 346C Number Transformation II 构造
- 作业:C++作业4