int
sqrt(int x)
. int mySqrt(int x) {
if (x <= 0)
{
return 0;
}
if ( x == 1)
{
return 1;
}
int low = 1, high = x, mid;
mid = low + (high - low) / 2; //防止下標越界
while ( low < high )
{
if ( x / mid / mid ) //防止i^2越界
{
low = mid + 1;
}
else
{
high = mid;
}
mid = low + (high - low) / 2;
}
return mid-1;
}
題目:
Suppose you have n versions [1, 2, ..., n] and you want to find out the first bad one, which causes all the following ones to be bad. You are given an API bool isBadVersion(version) which will return whether version is bad.
int firstBadVersion(int n) {
int p = 1, r = n;
int mid = p+(r-p)/2;
while ( p<r ){
if ( isBadVersion(mid) )
{
r = mid;
} //is Bad
else{
p = mid+1;
} //is good
mid = p+(r-p)/2;
}
return mid;
}