lintcode-141 x的平方根
2017-08-13 00:00
141 查看
原题链接:http://www.lintcode.com/zh-cn/problem/sqrtx/
实现
样例
sqrt(3) = 1
sqrt(4) = 2
sqrt(5) = 2
sqrt(10) = 3
直接上代码吧
主要是利用二分的思想,但是有些和二分不一样,就是当mid > x / mid时,high = mid, 而不是high = mid - 1.
另外一个特别需要注意的地方就是数的范围,之所以写成mid == x / mid, 还有后面的 mid > x / mid, low < x / low, high > x / high, 是因为如果两个int直接相乘,结果会超过Integet.MAX_VALUE, 导致出错,所以改用除法。还有mid = low + (high - low) / 2也是一样
实现
int sqrt(int x)函数,计算并返回 x 的平方根。
样例
sqrt(3) = 1
sqrt(4) = 2
sqrt(5) = 2
sqrt(10) = 3
直接上代码吧
class Solution { /** * @param x: An integer * @return: The sqrt of x */ public int sqrt(int x) { // write your code here int low = 1; int high = x; int mid = 0; while (low <= high) { mid = low + (high - low) / 2; if (mid == x / mid) { return mid; } else if (mid > x / mid) { high = mid; } else { low = mid; } if ((low < x / low) && (high > x / high) && (low == high - 1)) { return low; } } return 0; } }
主要是利用二分的思想,但是有些和二分不一样,就是当mid > x / mid时,high = mid, 而不是high = mid - 1.
另外一个特别需要注意的地方就是数的范围,之所以写成mid == x / mid, 还有后面的 mid > x / mid, low < x / low, high > x / high, 是因为如果两个int直接相乘,结果会超过Integet.MAX_VALUE, 导致出错,所以改用除法。还有mid = low + (high - low) / 2也是一样
相关文章推荐
- lintcode-x的平方根-141
- lintcode:x的平方根
- 判断是否为平方数之和-LintCode
- lintcode-513-完美平方
- LintCode-x的平方根
- 完美平方-LintCode
- LintCode_x的平方根
- lintcode:完美平方
- lintcode-141-x的平方根
- LintCode 完美平方
- x的平方根(LintCode)
- lintcode:x的平方根
- lintcode--x的平方根
- x的平方根-LintCode
- LintCode题解之判断是否为平方数之和
- Lintcode141 Sqrtx solution 题解
- LintCode:x的平方根
- lintcode--完美平方
- lintcode:Longest Substring Without Repeating Characters
- [LintCode 480] 二叉树的所有路径(Python)