原题链接在这里:https://leetcode.com/problems/sqrtx/
很自然的想到由小到大每个数算平方和x比较,但如此会用O(n)时间。
类似此类查找可以用 Binary Search, 先找middle = (left + right)/2, middle^2 和 x 比较,比x小就在middle 和 right这段找,反之亦然。
Note: 1. middle 要设为long, 否则middle * middle 可能overflow
2. while loop的条件是l<=r, 别忘了=
3. return 别忘了加cast
4. 即使这不是一个perfect square 也是返回right, 因为此时right就是那个较小的值。
AC Java:
public class Solution {
public int mySqrt(int x) {
//Binary Search
if(x<0){
return 0;
}
int l = 0;
int r = x;
while(l<=r){ //error
long middle = (l+r)/2;
if(middle * middle < x){
l = (int)middle + 1;
}else if(middle * middle >x){
r = (int)middle - 1;
}else{
return (int)middle; //error
}
}
return r;
}
}

本文介绍了一种求平方根的有效算法,通过二分查找(Binary Search)的方式在O(log n)的时间复杂度内找到最接近目标值的平方根。文章详细解析了算法实现过程中的注意事项,并提供了完整的Java代码示例。
293

被折叠的 条评论
为什么被折叠?



