LeetCode 69. Sqrt(x)
2021-01-27 19:22:30
# leetcode
# core problems
Problem
1. 题目简述
给出一个数字x,计算其开方,向下取整。
2. 算法思路
最经典的几道题目之一,有很多坑。
第一,注意不要用 mid * mid,很容易越界,不好办。其次,注意问题的本质,究竟是要求左边界还是右边界!!!也就是check成立时,我们希望继续去找左侧还是右侧。
这里,我们希望找的是右边界,也就是要找到一个“最大”的y,使得y^2<=x。
class Solution {
public int mySqrt(int x) {
int l = 0, r = x;
while (l < r) {
// 这里应该是求右边界!!!找到一个数y,使得y^2 <= x
int mid = (l + r + 1) / 2;
if (mid <= x / mid) {
l = mid;
} else {
r = mid - 1;
}
}
return r;
}
}