题目描述
不使用自带函数来求出x平方根的整数部分
思路:二分查找
查找到最后一个可以插入x的平方根的位置(右边界)。 注:左边界表示第一个可以插入的位置。
代码
class Solution {
public:
int mySqrt(int x) {
if(x == 0 || x == 1){
return x;
}
// 在[0, x)中找到右边界
int left = 0;
int right = x;
while(left < right){
int mid = left + (right - left) / 2;
if((long long)mid * mid == x){
return mid;
}
else if((long long )mid * mid > x){
right = mid;
} else {
left = mid + 1;
}
}
return left - 1;
}
};
附:二分查找代码
寻找相等的值
int left=0;
int right=nums.size();
while(left<right){
int mid=(left+right)/2;
if(nums[mid]==target) right=mid;
else if(nums[mid]<target) left=mid+1;
else if(nums[mid]>target) right=mid;
}
return left;
//注:如果搜索不到,去搜索区间[left,mid),或[mid+1,right)
寻找target的左边界
int left=0;
int right=nums.size();
while(left<right){
int mid=(left+right)/2;
if(nums[mid]==target) right=mid;
else if(nums[mid]<target) left=mid+1;
else if(nums[mid]>target) right=mid;
}
return left;
寻找target的右边界
int left=0;
int right=nums.size();
while(left<right){
int mid=(left+right)/2;
if(nums[mid]==target) left=mid+1;
else if(nums[mid]<target) left=mid+1;
else if(nums[mid]>target) right=mid;
}
return left-1;