我直接不讲码德 return sqrt(x)
简单二分,没啥好讲的,因为整形是向下取整所以返回的值肯定是小于等于sqrt(x)的
所以只要找到某个i满足i*i<=x和(i+1)*(i+1)>x,然后返回i即可
class Solution {
public:
int mySqrt(int x) {
if(x<2){
return x;
}
long long int p=0,q=x;
while(p+1<q){
long long int mid=p+(q-p)/2;
if(mid*mid<=x){
p=mid;
}
else{
q=mid;
}
}
return p;
}
};
class Solution {
public:
char nextGreatestLetter(vector<char>& letters, char target) {
int p=0,q=letters.size()-1;
if(letters[q]<=target||letters[0]>target){
return letters[0];
}
while(p<q){
int mid=p+(q-p)/2;
if(letters[mid]>target){
q=mid;
}
else{
p=mid+1;
}
}
return letters[q];
}
};