[leetcode] 69.x的平方根

79 阅读1分钟

题目描述

不使用自带函数来求出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;