基础二分查找
与平方根相关的二分查找
本题目要求的是满足 n 2 ≤ x n^2 \leq x n2≤x的最大的 n n n,其中 0 ≤ n ≤ x 0\leq n\leq x 0≤n≤x且 n n n为整数。
解题方法:二分查找
通过二分查找在数组[0, 1, 2, ..., x]
中查找平方等于
x
x
x的元素:
- 如果找到了,直接返回
- 如果没找到,
end
即为满足条件的 n n n
class Solution {
public int mySqrt(int x) {
// 需要注意mid_sqrt是有可能超出int的范围的
long start = 0, end = x;
long mid;
long mid_sqrt;
while(start <= end){
mid = (start + end) / 2;
mid_sqrt = mid * mid;
if(mid_sqrt == x){
return (int)mid;
}else if(mid_sqrt < x){
start = mid + 1;
}else{
end = mid - 1;
}
}
return (int)end;
}
}