int sqrt(int x).注意这道题是返回int 的平方根 所以:
sqrt(3) = 1
sqrt(4) = 2
sqrt(5) = 2
sqrt(10) = 3
用二分法来判定 逐步找到平方根, 但是要注意的是只要符合 mid^2 <= x < (mid + 1)^2 那么mid就是x的平方根.
另外要注意的是mid^2可能溢出 所以用x/mid >= mid的形式来表示
时间复杂度是O(log(x)) 空间是O(1)
public class Solution {
public int mySqrt(int x) {
if (x < 0) {
return -1;
} else if (x == 0) {
return 0;
}
int left = 1;
int right = x;
while (left <= right) {
int mid = (left + right) / 2;
if (x / mid >= mid && x / (mid + 1) < mid + 1 ) {
return mid;
} else if (x / mid < mid) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return 0;
}
}
没有评论:
发表评论