这段代码工作正常://我使用二分搜索来查找它
class Solution {
public:
int mySqrt(int x) {
//base cases
if( x==0){
return x;
}
long long int first = 1, last = x;
while(first <= last){
int mid = first + (last - first) / 2;
if(mid == x/mid){
return mid;
}
else if(mid >( x /mid)){
last = mid -1;
}
else{
first = mid + 1;
}
}
return last;
}
};
但是如果我更换
int mid = first + (last - first) / 2;
至 int mid = (first + (last - first)) / 2;
那么就超出了时间限制,为什么呢?
first + (last - first) / 2
(1) 和 (first + (last - first)) / 2
(2) 不相等。您可能需要 (first + last) / 2
(3)。
first + (last - first) / 2 = (1)
first / 2 + last / 2 =
(first + last) / 2 (3)