【发布时间】:2020-06-27 20:09:23
【问题描述】:
好的,所以我已经研究了一段时间,我知道我的逻辑是正确的,但是,我似乎无法生成正确的正数的底平方根。
public int mySqrt(int x) {
if(x < 2) return x;
double lowerBound = 0.0, upperBound = x, midPoint = 0.0;
while(lowerBound <= upperBound) {
midPoint = lowerBound + (upperBound - lowerBound) / 2;
double square = Math.pow(midPoint, 2);
if(Double.compare(square, x) < 0) lowerBound = midPoint + 1;
else if(Double.compare(square, x) > 0) upperBound = midPoint - 1;
else return (int) midPoint;
}
return (int) midPoint;
}
例如,我失败的一个测试用例是针对x = 2:它应该返回 1 但我返回 2。这没有意义,因为我显然先取了一个 midPoint。向左或向右的逻辑是错误的吗?
【问题讨论】:
-
@Michael 因为我返回的是真正平方根的取底结果,所以 sqrt(2) = 1.414... 所以我返回 1。
标签: java algorithm binary-search