二分查找 01

82 阅读1分钟

LeetCode 69

原题链接

代码如下:

/**
 * 二分法
 * 
 * 由于x平方根的整数部分ans是满足k^2 ≤ x的最大k值,因此我们可以对k进行二分查找,从而得到答案。
 * 二分查找的下界为0,上界可以粗略地设定为x。在二分查找的每一步中, 我们只需要比较中间元素mid的平方与x的大
 * 小关系,并通过比较的结果调整上下界的范围。于我们所有的运算都是整数运算,不会存在误差,因此在得到最终的答案 ans后,也就不需要再去尝试ans+ 1了。
 * 
 * Code by java
 */
class Solution {
	public int mySqrt(int x) {
		int l = 0, r = x, ans = -1;
		while (l <= r) {
			int mid = l + (r - l) / 2;
			if ((long) mid * mid <= x) {
				ans = mid;
				l = mid + 1;
			} else {
				r = mid - 1;
			}
		}
		return ans;
	}
}