河南有名的做网站公司有哪些,做设计找素材的+网站有哪些,温州做网站厉害的公司有哪些,昆明市住房和城乡建设局门户网站LeetCode二分查找#xff1a;x 的平方根
题目描述
给你一个非负整数 x #xff0c;计算并返回 x 的 算术平方根 。
由于返回类型是整数#xff0c;结果只保留 整数部分 #xff0c;小数部分将被 舍去 。
**注意#xff1a;**不允许使用任何内置指数函数和算符#x…LeetCode二分查找x 的平方根
题目描述
给你一个非负整数 x 计算并返回 x 的 算术平方根 。
由于返回类型是整数结果只保留 整数部分 小数部分将被 舍去 。
**注意**不允许使用任何内置指数函数和算符例如 pow(x, 0.5) 或者 x ** 0.5 。
示例 1
输入x 4
输出2示例 2
输入x 8
输出2
解释8 的算术平方根是 2.82842..., 由于返回类型是整数小数部分将被舍去。解题思路
经典写法
用二分查找的思想通过不断缩小搜索范围最终找到平方根的整数部分。 为什么采用long而不是int 因为再计算r时可能出现溢出 需要注意得一点是在计算 mid 时使用 left(right-left) / 2而不是 (left right) / 2。这样可以避免溢出。
代码
class Solution {public int mySqrt(int x) {long high x / 2;long low 0;if (x 1) {return 1;}while (low high) {long mid low (high - low) / 2;long r mid * mid;if (r x) {high mid - 1;} else if (r x) {low mid 1;} else {return (int) mid;}}// 返回 low - 1 而不是 lowreturn (int) (low - 1);}
}